• 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了,直接就是想调谁就调谁。

  • 相关阅读:
    安亦行
    [SCOI2010]连续攻击游戏 二分图匹配
    [USACO11JAN]Roads and Planes G
    CF796C Bank Hacking
    括号类问题总结 持续更新
    CF1216E Numerical Sequence Hard Version 数学
    POJ3613 Cow Relays 矩阵快速幂
    倍增法求lca(最近公共祖先)
    Codeforces C. Jzzhu and Cities(dijkstra最短路)
    Codeforces B. Mouse Hunt(强连通分解缩点)
  • 原文地址:https://www.cnblogs.com/xiaoyoucai/p/7346268.html
Copyright © 2020-2023  润新知