就像Java和COM那样.PHP5带来了强大的面向对象重载,PHP4中已经有了重载的语法来建立对于外部对象模型的映射.允许顺序员建立自定义的行为来访问属性和调用方法.
__set,重载可以通过__get.and__call几个特殊方法来进行.当Zend引擎试图访问一个成员并没有找到时,PHP将会调用这些方法.__get和__set代替所有对属性变量数组的访问.如果必要,例图1中.可以实现任何类型你想要的过滤.例如,脚本可以禁止设置属性值,开始时用一定的前缀或包括一定类型的值.
方法名和方法接收的参数将会传给__call方法,__call方法说明了如何调用未经定义的方法.调用未定义方法时.PHP传送__call值返回给未定义的方法.
User-leveloverloading
<?php
classOverload
{
privat$properti=arrai;
function__get$property_nam
{
ifisset$this->properties[$property_name]
{
return$this->properties[$property_name];
}
els
{
returnNULL;
}
}
$valu function__set$property_name.
{
$this->properties[$property_name]=$value;
}
$arg function__call$function_name.
{
print"Invoke$function_nam\n";
print"A rguments:";
print_r$arg;
returnPUE;
}
}
$o=newOverload;
激活__set //invok__set给一个不存在属性变量赋值.
$o->dynaProp="DynamContent";
//invok__get激活__get
print$o->dynaProp."\n";
//invok__call激活__call
"Zeev"; $o->dynaMethod"Leon".
?>
类的自动加载,PHP会演讲一个致命错误.解决方法就是添加一个类,当你尝试使用一个未定义的类时.可以用includ包括一个文件.终究你知道要用到哪个类.但是,PHP提供了类的自动加载功能,这可以节省编程的时间.当你尝试使用一个PHP没有组织到类,会寻找一个__autoload全局函数.如果存在这个函数,PHP会用一个参数来调用它,参数即类的名称.PHP会执行__autoload.脚本假设class_User.php中定义有User类..不管调用时是大写还是小写,例子图2说明了__autoload如何使用的.假设当前目录下每个文件对应一个类.当脚本尝试来发生一个类User实例.PHP将返回名称的小写.
Classautoloading
<?php
//definautoloadfunction
function__autoload$class
{
includ"class_".ucfirst$class.".php";
}
//useaclassthatmustbeautoload
$u=newUser;
$u->nam="Leon";
$u->printNam;
?>