有了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[0];
			return get_called_class() . '('. $id . ')';
		}

		throw new Exception('Invalid method : '.$name);
    }
 }

class Person extends ActiveRecordBase {	
 
}

// output: Person(123)
echo Person::getById(123);

?>
原文地址:https://www.cnblogs.com/nonlyli/p/1696161.html