0

After not really working with PhP for a long time, I am moving into php 5 territory. One of the things I am now trying to figure out, is how to use spl autoload functionality. And before I make stupid beginners errors, could you please confirm / advice:

As far as I understand, the SPL_autoload does not mean there is no need for includes anymore; I will still need to include the configuration I want to use manually like this:

require_once("includess/php_ini_settings.php");

In the php_ini_settings.php I subsequently can run an autoloader, to load all the php files in a certain directory, such as my classes directory:

// Directory for classes
define('CLASS_DIR', 'classes/');

// Add classes dir to include path
set_include_path(CLASS_DIR);

spl_autoload_extensions(".php"); // comma-separated list
spl_autoload_register();

Is this indeed the right (and most efficient) way to autoload classes into all my pages?

-- added: -- It is mentioned that unless you use a different naming scheme, the is no need to specify an autoloader. I assume the naming scheme default is using the class name as filename, in non-caps?

Jelle Ferwerda
  • 1,254
  • 1
  • 7
  • 13
  • As if there were thousands of articles on this topic available with a simple google search. – Mark Dec 01 '13 at 14:58
  • Thx for the comment RainFromHeaven. As if I have not been reading a few dozen of these, none of them actually being explicit on how the autoloader knows where to look for the classes, or how it is initiated. – Jelle Ferwerda Dec 01 '13 at 15:38

1 Answers1

2

You don't really need the spl_autoload_extensions() and spl_autoload_register() part, unless you use a different naming scheme. So you basically just need to add your class path to the include path, like you already do.

I suggest using SPL_autoload_suxx() from http://bugs.php.net/49625 as your __autoload() function though to have more sensible case-sensitivity:

function __autoload($cn) {
    $rc = false;
    $exts = explode(',', spl_autoload_extensions());
    $sep = (substr(PHP_OS, 0, 3) == 'Win') ? ';' : ':';
    $paths = explode($sep, ini_get('include_path'));
    foreach ($paths as $path) {
        foreach ($exts as $ext) {
            $file = $path.DIRECTORY_SEPARATOR.$cn.$ext;
            if (is_readable($file)) {
                require_once $file;
                $rc = $file;
                break;
            }
        }
    }
    return $rc;
}
DanMan
  • 11,323
  • 4
  • 40
  • 61