不好解释具体是想要做什么,总之,有了__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[0]; return get_called_class() . '('. $id . ')'; } throw new Exception('Invalid method : '.$name); } } class Person extends ActiveRecordBase { } // output: Person(123) echo Person::getById(123); ?>