作为一个框架,文件的加载机制是不能少的,那么我们应该怎么加载呢,这些PHP已经给我们想好了,所以我们只需要按照规则办事就可以了,PHP中有两个函数可以完成这个功能,第一个是__autoload,现在已经很少用了,取而代之的是功能更加强大的spl_autoload_register,它需要的版本是PHP5.2.1之后的版本,现在我们的主流版本都是支持的,因此可以放心使用。
在以前的PHP版本中,我们往往需要require一堆的文件名,比如配置文件、数据库连接文件、日志文件等等,后来我们有了__autoload函数,它是在一个函数内完成所有的导入工作,它的一个优点是可以用编程的方式来处理,比如用正则表达式一次可以导入n个文件,在一定程度上会很方便我们的操作,但是,我们必须在__autoload中把所有的类型都写到,否则自动加载会得不到很好的实现。
现在有了spl_autoload_register,它的功能就是可以注册n个加载函数,我们随时随地可以使用这个内置函数来指定我们需要加载的文件名,下面是它的函数原型:
bool spl_autoload_register ( [callback $autoload_function] )
下面我们用代码实战一下:
首先我们创建一个B.class.php,内容如下:
<?php class B { private $name = "辛星"; private $age = 23; function getmsg(){ return "姓名是:".$this->name." 年龄是:".$this->age; } }
然后我们在同级目录下新建一个a.php文件,内容如下:
<?php //先定义一个加载函数 function xin_load($class){ $file = $class.".class.php"; if(file_exists($file)){ require_once($file); } } //然后注册它 spl_autoload_register('xin_load'); $class = new B(); echo $class->getmsg();
这里的类B之所以能够被正确的实例化,就是因为当我们定义一个类B的实例的时候,系统发现需要去加载文件才行,于是他去找所有的加载函数,然后再B.class.php中找到了了B的定义,也就加载该文件,值得注意的是,这里的只有B.class.php被导入,其他的格式差不多的并不会被导入。
时间: 2024-10-12 07:25:56