企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
--- ### 1. 自定义门面类 -- 注册 > `AppServiceProvider` 中写入 public function register() { //注册方法 $this->app->singleton('product' , function (){ return new ProductService(); }); //单例模式 } ### 2. 建立一个 Product 类继承 Facade > #### 这里 @method static getProduct($id) 调用创建的类的静态方法 namespace App\Facades; use Illuminate\Support\Facades\Facade; /** * Class Product * @package App\Facades * @method static getProduct($id) */ class Product extends Facade { protected static function getFacadeAccessor() { return 'product'; } } ### 3. 建立实体类 namespace App; class ProductService { public function getProduct($id) { echo "product id: ".$id; } } ### 4. 调用静态方法 -- 通过门面 public function facadeTest() { return \App\Facades\Product::getProduct(1); } ### 5. 深入门面 , 为什么能调用 static, 在 Facade 中 > #### 首先看看这个方法存在不,不存在则直接实例化服务对象,然后通过反射传入参数调用可变参数 public static function __callStatic($method, $args) { $instance = static::getFacadeRoot(); if (! $instance) { throw new RuntimeException('A facade root has not been set.'); } return $instance->$method(...$args); }