__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里这么做的,自己解决 :)