29)PHP,自动加载类

(1)作用:

类的自动加载是指,在外面的页面中,并不需要去“引入”(包含)类文件,但是程序会在需要一个类的时候就自动去“动态加载”该类。

(2)什么叫做“需要一个类”?通常是这样的情况:

      1,创建一个对象的时候(new)

      2,直接使用一个类名(操作静态或静态方法)

    做法非常简单:

做法1:使用__autoload魔术函数。

    即,“当程序需要一个类”的时候,就会去调用该函数:该函数我们需要自己去定义并在其中写好加载类文件的通用语句:

                                         

做法2:使用spl_autoload_register函数

    该函数的作用是:用它“注册”(声明)多个可以用来代替__autoload函数作用的函数,语法如下:

              spl_autoload_regist(“函数名1”);

              spl_autoload_regist(“函数名2”);

                    .........

自然,其后也得去定义这些函数,并且这些函数的作用跟__autoload一样,不过此时就可以应对“更多的情形”——比如类文件分布在不同的目录中。

                                        

 

这个自动加载的代码是这样的,我下面做了一个小的例子来理解这个自动加载类:

一共有三个php文件,他们的目录结构是这样的:

                                           那个a.php是主要的,c.php和b.php是一个辅助文件,就是a.php自动加载c.php和b.php

 

 1 下面的这个是一个主的php文件,a.php
  <?php 2 function auto1($classname1){ 3 $file='../'.$classname1.'.php'; 4 if(file_exists($file)) { 5 require $file; 6 } 7 } 8 9 function auto2($classname1){ 10 $file='./'.$classname1.'.php'; 11 if(file_exists($file)) { 12 require $file; 13 } 14 } 15 spl_autoload_register('auto1'); 16 spl_autoload_register('auto2'); 17 $c=new B(); 18 $c->fun(); 19 ?>

 下面是b.php

 1 <?php
 2     /**
 3      * Created by PhpStorm.
 4      * User: Interact
 5      * Date: 2017/4/13
 6      * Time: 21:21
 7      */
 8     
 9     print "b";
10     class B{
11         function fun(){
12             echo "我就是外面的那个b.php文件";
13         
14         }
15     }

下面这个是c.php

 1 <?php
 2     /**
 3      * Created by PhpStorm.
 4      * User: Interact
 5      * Date: 2017/4/13
 6      * Time: 21:31
 7      */
 8    class  C{
 9        function fun1(){
10            echo "我就是里面的那个C.php文件,";
11        }
12    }

然后我在那个a.php文件假如去掉对于b.php文件的加载,那么就会报错,但是,我写了那两个自动加载的类,以后就不用每次都include或者require了,直接就是想调谁就调谁。

posted @ 2017-08-11 15:41  小油菜1  阅读(153)  评论(0编辑  收藏  举报