laravel的“门面”和“契约”的问题
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 16:47:41
[PHP讨论组]

laravel的“门面”和“契约”的问题:
问题有两个:
1、这两个东西的使用场景是什么?
2、我理解不了为什么要使用这两个词,感觉八竿子打不着,这两个词跟它们的功能有什么关联吗?

过去多啦不再A梦
过去多啦不再A梦

全部回复(3)
给我你的怀抱

简单的说:
外观(你说的门面)是外观模式的实现。
协议(你说的契约)是工厂方法模式抽象工厂模式的实现。

阅读一下设计模式,你能收货不少。

高洛峰

你要先学会用依赖注入容器。

Laravel的Facade就是从容器里调用服务的快捷方式。

没有Facade的时候,你可能要这样拿到一个服务/对象,然后调用:

$service = App::make('some_service');
$service->doSomething();

因为你在容器里注册了'some_service',所以容器能make一个实例给你。

Facade只是用静态方式简化了这个使用过程,底层用__callStatic把函数和参数传给服务实例:

class SomeService extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'some_service'; // 这是容器里的键
    }
}

SomeService::doSomething(); // 底层和第一段代码是类似的

Contract就是一堆框架自带的接口,可以通过依赖注入得到具体实现。

public function index(SomeService $service) { // 等服务容器注入一个SomeService。
    $service->doSomething();
}

Facade和Contract只是依赖注入容器的不同使用方式,用Facade就是自己去容器取(把容器当Service Locator用),用Contract就是等容器注入依赖。

曾经蜡笔没有小新

门面,往简单了说,就是给服务容器中绑定的服务起了个别名,利用class_alias函数
比如App对应Container类。

契约,顾名思义,就是一种规定,双方都认可并且遵守的东西,而“接口”也是具备这些特性,楼主问的,应该“面向接口编程”,面向接口编程,比较难说明白,本人资历尚浅,需楼主自己多实践,多体会,见谅…

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号