什么是面向对象?面向对象的简单了解!返回列表
上传时间: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-fpm 基础介绍
- 下一篇:COOKIE、SESSION之彻底搞定!