有了PHP 5.3的__callStatic魔术方法,就可以做按类名和方法名同时魔术了
不好解释具体是想要做什么,总之,有了__callStatic,可以省不少代码了。而且这个方法支持在子类中调用,配合上get_called_class,子类也一起魔术了。以前用.NET组件Castle的ActiveRecord的时候,.NET 2.0版可以给每个子类加静态的getById方法,现在用PHP也可以这样做。
<?php
class ActiveRecordBase {
/**As of PHP 5.3.0*/
public static function __callStatic($name, $arguments) {
if ($name == 'getById') {
$id= $arguments;
return get_called_class() . '('. $id . ')';
}
throw new Exception('Invalid method : '.$name);
}
}
class Person extends ActiveRecordBase {
}
// output: Person(123)
echo Person::getById(123);
?>
页:
[1]