PHP 5.3 后新增了 __call 与__callStatic 魔法方法。
用途:
__call:当要调用的方法不存在或权限不足时,会自动调用__call 方法。
__callStatic:当调用的静态方法不存在或权限不足时,会自动调用__callStatic方法。
示例:
__call($funcname, $arguments)
__callStatic($funcname, $arguments)
参数说明:
$funcname String 调用的方法名称。
$arguments Array 调用方法时所带的参数。
在TP5里面,Db基类使用该方法在未继承Query操作类的情况下,手动实例Query类并调用其中方法完成操作。如:\think\Db::name('tableName'), 在Db类里并没有name这个静态方法,该方法存在于操作类Query.php里面且不是一个静态方法,而Db类也未继承该类。TP5在Db类中使用__callStatic方法重定向了这个方法,在__callStatic方法 里面实例化Query类并调用name方法完成操作。