JakeParis
JakeParis

Reputation: 11210

Does __autoload() go in the main class?

I'm new to classes, so sorry if this is a wicked noob question.

JMC is my main class. Other classes are named like JMC_files or JMC_array. I want to use autoload. Does the autoload function go inside my main class or outside of it? So for a visual, should I do this:

class JMC {
    function __autoload($className) {
        include_once($className.'.php');
    }
    protected function foo() { }
}

class JMC_files extends JMC (){
}

or this:

function __autoload($className) {
    include_once($className.'.php');
}

class JMC {
    protected function foo() { }
}

class JMC_files extends JMC (){
}

Upvotes: 1

Views: 511

Answers (1)

BoltClock
BoltClock

Reputation: 723598

__autoload() is the name of a magic function that is automatically called by default when you attempt to reference a class that doesn't yet exist in userland. It's a function, not a class method, so you define it like this:

function __autoload($className) {
    include_once($className.'.php');
}

If you like, you may set your own autoload handler (can be a function or a class method) instead, by using spl_autoload_register(). For example, if you want to give your main JMC class a static autoload() method that handles autoloading of class files, you would do something like this:

class JMC {
    public static function autoload($className) {
        include_once($className.'.php');
    }

    protected function foo() {}
}

spl_autoload_register('JMC::autoload');

// By referencing this class, if it doesn't yet exist then JMC's autoload()
// gets called and PHP will attempt to load JMC_files.php to look for this class
$files = new JMC_files();
$files->foo();

Where you want to place your autoload function depends on you. Your main JMC class sounds like a reasonable place for it; my framework's autoload method lives in the main class too.

Upvotes: 5

Related Questions