PHP类的自动加载

    xiaoxiao2025-05-24  6

    __autoload用法


    __autoload()是实现了一个自动加载的功能;

    当你去实例化一个未声明的类时,会自动调用__autoload()方法;

    如果new时,该类已经声明,__autoload()方法不执行;

    __autoload()方法被系统自动调用时,收到一个一个参数,值为类名!

    HumanModel.php Default <?php // HumanModel类 class HumanModel { public function t() { echo '人类'; } } 1 2 3 4 5 6 7 8 < ? php // HumanModel类   class HumanModel {      public function t ( ) {          echo '人类' ;      } } 05.php PHP <?php require('./HumanModel.php'); $lisi = new HumanModel(); $lisi->t(); //人类 /* 如上,没有require引入进来时,报错 手动require进来 如果网站比较大,model类比较多,如何自动加载进来? HumanModel UserModel GoodsModel CatModel OrderModel ... 1:这么多的model,我用谁,就得include/require谁. 2:而且不知道,之前是否已经include/require进来某个类 (这个用once可以解决,但once的效率很低) 这时 我们可以用自动加载! */ echo '<br />'; function __autoload($c) { echo '~~~~',$c,'~~~~~'; } $ming = new Pig(); //~~~~Pig~~~~~ //( ! ) Fatal error: Class 'Pig' not found in D:\wamp\www\1115\05.php on line 45 /* 如果调用某个不存在的类, 在报错之前, 我们还有一次介入机会 __autoload函数 系统会调用__autoload()函数, 并把"类名"自动传给__autoload函数 我们自然可以在__autoload里 加载需要的类! 见下页 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <?php require ( './HumanModel.php' ) ;   $lisi = new HumanModel ( ) ; $lisi -> t ( ) ;   //人类   /* 如上,没有require引入进来时,报错 手动require进来   如果网站比较大,model类比较多,如何自动加载进来? HumanModel UserModel GoodsModel CatModel OrderModel ...   1:这么多的model,我用谁,就得include/require谁. 2:而且不知道,之前是否已经include/require进来某个类 (这个用once可以解决,但once的效率很低) 这时 我们可以用自动加载! */   echo '<br />' ;     function __autoload ( $c ) {      echo '~~~~' , $c , '~~~~~' ; }   $ming = new Pig ( ) ;     //~~~~Pig~~~~~ //( ! ) Fatal error: Class 'Pig' not found in D:\wamp\www\1115\05.php on line 45   /*   如果调用某个不存在的类, 在报错之前, 我们还有一次介入机会 __autoload函数   系统会调用__autoload()函数, 并把"类名"自动传给__autoload函数   我们自然可以在__autoload里 加载需要的类!   见下页 */ 06.php PHP <?php /*** __autoload用法 __autoload()是实现了一个自动加载的功能; 当你去实例化一个为声明的类时,会自动调用__autoload()方法; 如果new时,该类已经声明,__autoload()方法不执行; __autoload()方法被系统自动调用时,收到一个一个参数,值为类名! ***/ function __autoload($c) { echo '我先自动加载'; echo './' . $c . '.php'; echo '<br />'; require('./' . $c . '.php'); } $lisi = new HumanModel(); $lisi->t(); /*我先自动加载./HumanModel.php 人类*/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <?php /*** __autoload用法 __autoload()是实现了一个自动加载的功能; 当你去实例化一个为声明的类时,会自动调用__autoload()方法; 如果new时,该类已经声明,__autoload()方法不执行; __autoload()方法被系统自动调用时,收到一个一个参数,值为类名! ***/     function __autoload ( $c ) {      echo '我先自动加载' ;      echo './' . $c . '.php' ;      echo '<br />' ;      require ( './' . $c . '.php' ) ; }     $lisi = new HumanModel ( ) ;   $lisi -> t ( ) ;   /*我先自动加载./HumanModel.php 人类*/ 07.php PHP <?php /*** ====笔记部分==== ***/ function test() { // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类 echo '来'; class Bird { public static function sing() { echo '百灵鸟儿放声唱!'; } } echo '去'; } // Bird::sing(); // Class 'Bird' not found test(); //函数要调用才能执行! Bird::sing(); //来去百灵鸟儿放声唱! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?php       /*** ====笔记部分==== ***/     function test ( ) {      // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类      echo '来' ;      class Bird {          public static function sing ( ) {              echo '百灵鸟儿放声唱!' ;          }      }        echo '去' ; }     // Bird::sing();   // Class 'Bird' not found     test ( ) ; //函数要调用才能执行! Bird:: sing ( ) ; //来去百灵鸟儿放声唱! 08.php Default <?php /*** ====自定义函数注册成为"自动加载函数"==== -------->自动加载只能用__autoload函数吗?<-------- 答:不是的,其实也可以指定一个函数 比如:我们就用zidongjiazai()函数 注意: 要通知系统,让系统知道--我自己写了一个自动加载方法,用这个! 怎么通知: 用系统函数 spl_auto_register ***/ // 下面这句话,是把zidongjiazai函数注册成为"自动加载函数"; spl_autoload_register('zidongjiazai'); function zidongjiazai($c) { echo '我引入了./' . $c . '.php','<br />'; require('./' . $c . '.php'); } $HumanModel = new HumanModel(); $HumanModel->t(); /** __autoload 是一个函数 我能自己注册一个自动加载函数 能否注册类的一个静态方法 当 自动加载函数? TP里这么做的,自己解决 :) **/ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 < ? php     /***     ====自定义函数注册成为"自动加载函数"====   -------->自动加载只能用__autoload函数吗?<--------             答:不是的,其实也可以指定一个函数   比如:我们就用zidongjiazai()函数 注意: 要通知系统,让系统知道--我自己写了一个自动加载方法,用这个! 怎么通知: 用系统函数 spl_auto_register   ***/     // 下面这句话,是把zidongjiazai函数注册成为"自动加载函数"; spl_autoload_register ( 'zidongjiazai' ) ;   function zidongjiazai ( $ c ) {      echo '我引入了./' .    $ c . '.php' , '<br />' ;      require ( './' .    $ c . '.php' ) ; }       $ HumanModel = new HumanModel ( ) ;   $ HumanModel -> t ( ) ;     /** __autoload 是一个函数   我能自己注册一个自动加载函数 能否注册类的一个静态方法 当 自动加载函数?     TP里这么做的,自己解决 :)
    转载请注明原文地址: https://ju.6miu.com/read-1299207.html
    最新回复(0)