搜尋

首頁  >  問答  >  主體

php 如何實作簡單的 Facades?

<?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();
阿神阿神2759 天前795

全部回覆(1)我來回復

  • 扔个三星炸死你

    扔个三星炸死你2017-06-21 10:12:55

    你需要自行實作一個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...

    回覆
    0
  • 取消回覆