php 如何实现简单的 Facades?
阿神
阿神 2017-06-21 10:10:55
[PHP讨论组]
<?php

# model.php

namespace Model\TestModel;

class User
{
    public function get()
    {
        return '爱因斯坦';
    }
}

<?php

# run.php

use Model\TestModel\User;

require __DIR__ . '/model.php';

$user = new User();
echo $user->get();

我想实现像 Laravel Facades 一样的用法,load.php怎么写?

<?php

# run.php

require __DIR__ . '/load.php';

echo \User::get();
阿神
阿神

闭关修行中......

全部回复(1)
扔个三星炸死你

你需要自行实现一个Facade对象,把所有的方法调用代理到真实的对象。

class UserFacade
{
    private $user;

    public function __constructor()
    {
        $this->user = new User();
    }

    public function __callStatic($name, $arguments)
    {
        return call_user_func_array(array($this, $name), $arguments);
    }
}
$user UserFacade::get();

任何对UserFacade的静态方法调用都会代理到User。__callStatic在有静态调用的时候触发,传入的参数$name是UserFacade::get静态调用的方法名,$arguments是参数的数组。

Laravel官方描述Facade是简洁的、容易记忆的类调用,Laravel的特性基本都提供Facade类。在业务开发这个层面,我不推荐静态类调用的设计方式,这个我另外开个帖子讨论。

参考

  • https://laravel.com/docs/5.4/...

  • http://php.net/manual/en/lang...

  • http://php.net/manual/en/func...

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

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