• 微信:
  • hai764003
  • QQ:
  • 511211014
  • E-mail:
  • jaquery@163.com

案例总数51

访问总数312382

收藏总数310913

什么是面向对象?面向对象的简单了解!返回列表

上传时间:2015-02-02 内容关键字:什么是面向对象?面向对象的简单了解!


九、类的自动加载:


1. 类自动加载的优势和引入:


$lisi = new HumanModel();

$lisi -> t();

单纯这样做,程序是会报错的,必须把有HumanModel类的页面引用过来。

但是如果网站比较大,model类比较多的话,比如:

HumanModel

userModel

GoodsModel

CatModel

...

...

这么多的Model,我用谁就得include/require谁,而且不知道,之前是否已经把include/require 进来某个类。遇到这种情况我们如何解决。这个时候我们可以用自动加载。


function __autoload($c){

require('./'.$c.'.php');

}

$ming = new Pig();


如果在调用某个不存在的类,在报错之前我们还有一次介入的机会__autoload函数会自动调用。把 类名自动传给__autoload函数,我们自然可以在__autoload加载需要的类。


被加载的类的php文件名必须和类名相同才行。


2. 函数内部的代码,只要函数调用之后,就和写在函数外部的代码是一模一样的:


function test(){

//函数内可以写任何合法的php代码,包括再声明一个函数或者类

class Bird{

public static function sing(){

echo '百灵鸟会唱歌';

}

}

}


Bird::sing(); //这个时候类未定义的。Class 'Bird' not found,是因为没有调用test函数,函数要调用才 可以执行,函数里的代码没有执行。如下就可以了:


test();

Bird::sing();


3. 自动加载只能用__autoload函数吗?用其他的有什么意义吗?


答案:不是的,其实也可以指定一个函数的。

function zdjz($c){

require('./'.$c.'.php');

}

$Human = new HumanModel();

这个时候,系统是无法识别zdjz这个函数的,也不会再调用HumanModel找不到的时候,自动调zdjz这个函数。


所以,要通知系统,让系统知道我自己写了一个自动加载的方法,当自动找不到HumanModel的函 数的时候,自动调用我这个方法。


而系统正好有一个函数可以做这件事情。spl_autoload_register('zdjz')这个函数,可以把zdjz函数注 册成为一个自动加载的函数类似__autoload


spl_autoload_register('zdjz');

function zdjz($c){

requrie './'.$c.'.php';

}

$Human = new Human();

$human->t();


我能自己注册一个自动加载的函数,能否这次类的一个静态方法,当做自动加载函数?

TP里就是这么做的。


 

小海哥推荐你看: 博客园  php教程分享网站  phpmywind  脚本之家