php之自动加载(懒加载)

    有A类和B类,如果在A类实例化B类,最简单直接的方法就是在B中使用include require_once A的文件,但是这种方法显然是不友好的,在框架中叶不是这么做的,在框架中使用的是自动加载的机制也成为懒加载。

    php中自动加载使用spl_autoload_register来完成在没有指定类的情况下自动加载的动作,有了这个方法在new一个类之前,就算没有引入这个类的文件,也能正确初始化指定类,这样我们就不用使用include require_once来引入文件,其实这个方法就是对include方法的封装,同时需要自己实现。下面举个🌰,并说明其原理

下面这段是autolod.php的源码:

 1 <?php
 2 spl_autoload_register(array('autoload','load'));
 3 class autoload{
 4     public static function load($classnName){
 5         if ( !class_exists($classnName) ) {
 6             $file = $classnName.'.php';
 7             require_once('./'.$file);
 8 
 9         }
10     }
11 }
12 $class = new autoload_test();
13 $class->test();

下面这段是autolod_test.php的源码:

1 <?php
2 class autoload_test{
3     function test(){
4         echo 'this is test';
5     }
6 }

代码很简单,但是足以说明spl_autoload_register自动加载的机制,在代码执行的过程中,当new一个未包含的类的时候,php会去执行spl_autoload_register中的第一个参数,就是需要new的类名,这个函数的功能就是把没有引入的类引入进来,但是有个前提就是类的名字和文件的名字要一致,这样就实现了自动加载的功能,是不是很简单。

    spl_autoload_register这个方法还有另一种常用的调用方式spl_autoload_register(array($className,$functionName));使用指定的类中的静态方法去完成自动加载,静态方法里面的结构就是完成autoload里面的逻辑。

posted @ 2019-03-01 18:27  青竹zzq  阅读(1070)  评论(0编辑  收藏  举报