php之类的自动加载
1 <?php 2 /* 3 类的自动加载 4 */ 5 /* 6 require('./HumanModel.php'); 7 $lisi = new HumanModel(); 8 $lisi->t(); 9 echo '<br />'; 10 */ 11 /* 12 如上,没有require时会报错 13 手动require进来 14 15 如果网站比较大,model类比较多 16 HumanModel 17 UserModel 18 GoodsModel 19 CatModel 20 OrderModel 21 ... 22 ... 23 这么多的model,我用谁,就得include/require谁 24 而且不知道,之前是否已经include/require进来某个类 25 (这个用once可以解决,但once的效率比较很低) 26 27 这时我们可以用自动加载 28 29 30 */ 31 /* 32 function __autoload($c) { 33 require('./' . $c . '.php'); 34 } 35 $ming = new HumanModel(); 36 $ming->t(); 37 /* 38 如果调用某个不存在的类 39 在报错之前 40 我们还有一次介入机会,用__autoload函数 41 42 系统会调用__autoload()函数 43 并把类名自动传给__autoload函数 44 45 我们就可以在__autoload里面加载需要的类 46 */ 47 48 function test() { 49 //函数内可以写任何合法的php代码,包括再声明函数/类 50 //类声明是全局有效的,不管在多深的函数内声明 51 class Bird { 52 public static function sing() { 53 echo '唱歌'; 54 } 55 } 56 57 } 58 test();//这里调用一下test,下面的一句就可以执行了 59 Bird::sing();//如果test函数都没调用,里面声明的类就调用了,这当然不行Fatal error: Class 'Bird' not found 60 61 /* 62 自动加载只能用__autoload函数吗? 63 答:不是的,其实也可以自定义一个函数 64 65 比如就用zidongjiazai()函数 66 67 注意:要通知系统,让系统知道--我自己写了一个自动加载的方法,要用我自己的 68 怎么通知:用系统函数 spl_autoload_register 69 */ 70 //下面这句话,是把zidongjiazai函数注册为'自动加载函数相当于__autoload的功能' 71 spl_autoload_register('zidongjiazai'); 72 function zidongjiazai($c) { 73 require('./' . $c . '.php'); 74 } 75 $lisi = new HumanModel(); 76 $lisi->t(); 77 /* 78 __autoload是一个函数 79 80 我能自己注册一个自动加载的函数 81 能否注册类的一个静态方法作为自动加载函数? 82 83 答:可以的 84 如下 85 86 spl_autoload_register('autoload::zidongjiazai'); 87 class autoload { 88 public static function zidongjiazai($c) { 89 require('./' . $c . '.php'); 90 } 91 } 92 $lisi = new HumanModel(); 93 $lisi->t(); 94 */ 95 ?>