爱在莫斯科 发表于 2015-8-28 11:29:25

有了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]
查看完整版本: 有了PHP 5.3的__callStatic魔术方法,就可以做按类名和方法名同时魔术了