Heim  >  Artikel  >  Backend-Entwicklung  >  跟着辛星认识一下PHP的自动加载

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

WBOY
WBOYOriginal
2016-06-23 13:53:28840Durchsuche

   作为一个框架,文件的加载机制是不能少的,那么我们应该怎么加载呢,这些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被导入,其他的格式差不多的并不会被导入。





Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn