php 外观模式,laravel Facades外观模式背后实现原理

外观模式 Facade 理解

上一个文章我们讲到需要 $ioc->make ('user') 才能拿到 User 的实例,再去使用 $user->login (); 那能不能更方便点,比如下面的用法,是不是很方便。<?php

UserFacade::login();

?>

Facade 工作原理#

Facade 核心实现原理就是在 UserFacade 提前注入 Ioc 容器。

定义一个服务提供者的外观类,在该类定义一个类的变量,跟 ioc 容器绑定的 key 一样,

通过静态魔术方法__callStatic 可以得到当前想要调用的 login

使用 static::$ioc->make ('user');

具体实现 Facade

1. 我们定义一个 User 的外观类 UserFacade<?php

class UserFacade

{

// 维护Ioc容器

protected static $ioc;

public static function setFacadeIoc($ioc)

{

static::$ioc = $ioc;

}

// 返回User在Ioc中的bind的key

protected static function getFacadeAccessor()

{

return 'user';

}

// php 魔术方法,当静态方法被调用时会被触发

public static function __callStatic($method, $args)

{

$instance = static::$ioc->make(static::getFacadeAccessor());

return $instance->$method(...$args);

}

}

//实例化IoC容器

$ioc = new Ioc();

$ioc->bind('log','FileLog');

$ioc->bind('user','User');

UserFacade::setFacadeIoc($ioc);

UserFacade::login();

?>

如果有对__callStatic 魔术方法不太明白的,可以查看 php 文档

__callstatic 用法

Laravel 为什么要定义 Facades,它有什么好处?#

有的同学说,使用 Facade 那不是更加麻烦了啊,还需要注入 ioc 容器,还得需要用魔术方法。

其实 laravel 在框架运行的时候这些步骤都帮我们自动加好了,我们只需要使用 UserFacade::login (); 就可以了。

使用 Facades 其实最主要的就是它提供了简单,易记的语法,从而无需手动注入或配置长长的类名。此外,由于他们对 PHP 静态方法的独特调用,使得测试起来非常容易。

好了我们这个章节的内容就到这里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值