<?php
导语:
在实际项目中,如果一个类在多个脚本中都需要使用的话,可以将这个类的定义代码,单独的放到一个文件内。
当需要的时候,将文件加载进来即可。
目标:
在加载类文件的时候,我们希望的情况是,首先,不需要手动加载该类文件(自动加载)。
其次,按需加载(需要哪个类文件就加载哪个类文件,不需要的时候不加载)
/·······················································/
如何实现类文件的自动加载:
第一步:
一般的我们会将类文件的文件名,命名为:类名.class.php
第二步:
我们需要借助__autoload()方法来实现类文件自动加载。
在php执行的过程中,如果发现需要使用一个类,并且此时当前脚本并没有这个类的定义代码。
那么php会自动调用__autoload()函数。并且在调用的同时,给该函数传递一个参数。参数就是当前需要的类的类名。
但是,系统只负责调用该方法,并不负责定义这个函数,所以需要我们去完善函数体。
$obj = new A;
function __autoload($class_name){
if(is_file("./$class_name.class.php")){
include_once("./$class_name.class.php");
}
}
/·······················································/
随着项目的扩展,我们可能需要注册其他自定义的自动加载函数。
第一步:定义一个可以加载类文件的普通函数
例如:
function my_autoload($class_name){
if(is_file("./$class_name.class.php")){
include_once("./$class_name.class.php");
}
}
第二步:将该函数注册成自动加载函数
这一步,我们需要借助另外一个系统函数来实现。
语法格式为:spl_autoload_register('函数名')
例如:
spl_autoload_register('my_autoload');
注册其他自定义自动加载函数,有几点需要注意的地方:
第一:注册一定要发生在需要某个类之前
第二:可以注册多个其他自定义自动加载函数
第三:一旦注册其他自定义的自动加载函数之后,系统的自动加载函数__autolaod将失效
第四:如果还需要__autoload起作用,可以像注册其他普通函数一样注册它
/·······················································/
在面向对象的编程风格中,我们一般会将用户自定义的自动加载函数封装到一个类中!
静态方法注册:
spl_autoload_register(array('类名','方法名'));
或者:
spl_autoload_register('类名::静态方法名');
例如:
class Common{
public static function my_autoload($class_name){
if(is_file("./$class_name.class.php")){
include_once("./$class_name.class.php");
}
}
}
spl_autoload_register(array('Common','my_autoload'));
或者:
spl_autoload_register('Common::my_autoload');
非静态方法注册:
spl_autoload_register(array(对象变量,'方法名'));
例如:
class Common{
public function my_autoload($class_name){
if(is_file("./$class_name.class.php")){
include_once("./$class_name.class.php");
}
}
}
$obj = new Common;
spl_autoload_register(array($obj, 'my_autoloads'));
php类文件的自动加载机制
最新推荐文章于 2021-04-03 00:36:10 发布