门面( Facade)
门面为容器中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个 facade 类。
- /thinkphp/library/think/Facade.php
// 调用实际类的方法
public static function __callStatic($method, $params)
{
return call_user_func_array([static::createFacade(), $method], $params);
}
- /thinkphp/library/think/facade/App.php
namespace think\facade;
use think\Facade;
//通过继承为动态类加入到静态类库
class App extends Facade
{
}
- 调用方法
use app\facade\App;
use think\Facade;
App::hello('thinkphp')
知识拓展
方法重载
用静态方式中调用一个不可访问方法时,__callStatic() 会被调用。
public static mixed __callStatic ( string $name , array $arguments )
$name
参数是要调用的方法名称。$arguments
参数是一个枚举数组,包含着要传递给方法 $name 的参数。
#
call_user_func_array
— 调用回调函数,并把一个数组参数作为回调函数的参数
mixed call_user_func_array ( callable $callback , array $param_arr )
把第一个参数作为回调函数(
callback
)调用,把参数数组作(param_arr
)为回调函数的的参数传入。