使用魔术方法__call可以实现对象间的函数式调用(以数组形式传递),也可以直接在本对象中使用__invoke(类似函数)。
<?php
class class1{
var $a;
function __call($name,$u){
if(class_exists($name))
$a=new class2();
return $a->__input($u[0]);
}
}
class class2{
function __construct(){
echo "对象已经建立"."<br>";
}
function __input($u){
if($u<5)
echo "小于5"."<br>";
else
echo "大于或等于5"."<br>";
}
function __invoke($k){
if($k<5)
echo "小于5"."<br>";
else
echo "大于或等于5"."<br>";
}
function __destruct(){
echo "对象已经销毁"."<br>";
}
}
$e=new class1();
$e->class2(2);
$e=null;
$e=new class2();
$e(9);
?>
调试结果为:
对象已经建立
小于5
对象已经销毁
对象已经建立
大于或等于5
对象已经销毁
总结:实现了不同对象的函数式调用,类的自动加载,也可用函数方法使用单独的类。