Reputation: 11210
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
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