<?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();
閉關(guān)修行中......
你需要自行實作一個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的靜態(tài)方法呼叫都會代理到User。 __callStatic
在有靜態(tài)呼叫的時候觸發(fā),傳入的參數(shù)$name是UserFacade::get
靜態(tài)呼叫的方法名,$arguments是參數(shù)的陣列。
Laravel官方描述Facade是簡潔的、容易記憶的類別調(diào)用,Laravel的特性基本上都提供Facade類別。在業(yè)務(wù)開發(fā)這個層面,我不推薦靜態(tài)類別呼叫的設(shè)計方式,這個我另外開個貼文討論。
參考
https://laravel.com/docs/5.4/...
http://php.net/manual/en/lang...
http://php.net/manual/en/func...