您的位置:首页 > 编程语言 > PHP开发

PHP 类的自动加载详细介绍 leyangjun

2014-07-24 18:25 267 查看
<span style="font-size:18px;">自动加载类库文件:
当类多了以后,比如要在一个文件中载入3个类库文件:a.class.php,b.class.php,c.class.php要用三个require_once(‘classes/a.class.php);
require_once(‘classes/b.class.php);
require_once(‘classes/c.class.php);
可以用PHP5自动加载的功能来处理:在全局应用配置文件中,定义一个特殊的函数__autoload($class)函数(__autoload并不是一个类的方法,只是单独的函数,和类没有关系):
function __autoload($class){
require_once(“classes/$class)
}
该函数放哪没有关系,在创建类实例时,也不必去调用这个autoload函数。PHP会自动完成。但务必注意一点:“在调用页面上创建实例所使用的类名称”、和“被调用的文件名”、以及“该文件中的类的名称”3个必须是一样的。这样就不需要去调用__autoload();如果不一样则必须单独调用__autoload(‘c’);并给它一个文件名前缀。如:
c.class.php文件的代码是:
class c{
public $m=7;
}
?>这里代码的类名称是c,而文件名也是c,
现在要在index.php调用:
function __autoload($class){
require_once “$class.class.php”;
}

$m = new c(); //创建实例调用的类也是c
echo $m->m;
?>
此时PHP会自动调用根目录下的c.class.php中的类C。

但如果c.class.php中的代码是:
class mm{
public $m=7;
}
?>
而调用页index.php代码是:
function __autoload($class){
require_once “$class.class.php”;
}
# __autoload(‘c’); //如果不加这一行就会出错。
$m = new mm();
echo $m->m;
?>
会出错,提示找不到mm.class.php文件。这时可以加一行__autoload(‘c’);但这样就达不到简化代码的目的。

类的家族化扩展:类的高级功能:

一、对象克隆:
当克隆一个对象的实例时,其属性初始值继承了被克隆对象的当前值。
class test
{
public $p=5;
function __clone(){ //只在克隆发生时起作用。用于改变在克隆时某些值
$this->p=15;
}
}
$a=new test();
echo $a->p;
$a->p=8; //如果没有__clone()方法影响,$b的P值将为8
$b = clone $a;
echo $b->p; //15</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: