Maison  >  Article  >  développement back-end  >  跟着辛星认识一下PHP的自动加载

跟着辛星认识一下PHP的自动加载

WBOY
WBOYoriginal
2016-06-23 13:53:28874parcourir

   作为一个框架,文件的加载机制是不能少的,那么我们应该怎么加载呢,这些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,内容如下:

<?phpclass 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被导入,其他的格式差不多的并不会被导入。





Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn