spl_autoload_register
(PHP 5 >= 5.1.2)
spl_autoload_register — 注册__autoload()函数
bool spl_autoload_register ([ callback $autoload_function
] )
将函数注册到SPL __autoload函数栈中。如果该栈中的函数尚未激活,则激活它们。如果在你的程序中已经实现了__autoload函数,它必须显式注册到__autoload栈中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload函数取代为spl_autoload()或spl_autoload_call()。
欲注册的自动装载函数。如果没有提供任何参数,则自动注册autoload的默认实现函数spl_autoload()。
上代码:
现在在ClassA.php文件中定义ClassA类
1 class ClassA{ 2 3 public function __construct(){ 4 5 echo "ClassA load success!"; 6 7 } 8 9 }
ClassB.php文件中:
1 class ClassB extends ClassA { 2 3 public function __construct(){ 4 5 echo "ClassB load success!"; 6 7 } 8 9 }
现在要在第三个文件中实例化上面两个类
就要引入这两个文件
1 require_once "ClassA.php"; 2 require_once "ClassB.php"; 3 4 $newobj = new ClassA(); 5 6 $newobj = new ClassB();
显得非常麻烦。现在,用spl_autoload_register函数:
function DIY_autoLoad($classname){ $classpath = "./".$classname.'.php'; if (file_exists($classpath)) { require_once($classpath); } } spl_autoload_register('DIY_autoLoad'); $newobj = new ClassA(); $newobj = new ClassB();
spl_autoload_register('DIY_autoLoad');
如果是一个类中的一个方法则spl_autoload_register('DIY_autoLoad');
代码如下:
1 class DIY { 2 static function DIY_autoLoad($classname){ 3 $classpath = "./".$classname.'.php'; 4 if (file_exists($classpath)) { 5 require_once($classpath); 6 } 7 } 8 } 9 spl_autoload_register(array('DIY', 'DIY_autoLoad')); 10 11 $newobj = new ClassA(); 12 13 $newobj = new ClassB();
数组第一个单元为类名,第二个单元为静态方法名,注意了,是静态;
PS:要求类名与文件名相同;
是不是很方便!