0

我想介绍一下 Laravel 如何基于 Facade 类创建魔法函数。现在我想要的是基于类名创建魔术函数中的中心类。例如:

// Example main class
class Facade 
{
    public function __construct(array $aliases = [])
    {
        $this->aliases = $aliases;
    }

    public function load()
    {
        // Do some magic...
    }
}

// Example Facade subclass
class Navigation 
{
    public function items(string $name)
    {
        return $name;
    }
}

// Array with aliases
$aliases = [
    'navigation' => 'App\Facades\Navigation',
];
new Facade($aliases);

// Then I want to call everywhere:
echo navigation()->items('name'); == 'name'

我怎么能这样做,我找不到任何关于 Laravel 是如何做到的。

4

1 回答 1

0

定义 PHP 自动加载器而不是 Facade 类:

spl_autoload_register(function ($class_name) {
    $aliases = [
        'navigation' => 'App\Facades\Navigation',
    ];

    if (array_key_exists($class_name, $aliases) {
        include $aliases[$class_name] . '.php';
    }
});

然后通过(注意缺少的括号)给你的班级打电话:

echo navigation->items('name');

有关更多信息 - PHP 自动加载文档

于 2017-07-05T19:42:49.757 回答