我想要了解一下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如何做的事。
答案 0 :(得分:0)
定义PHP自动加载器而不是Facade类:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="countries">
<SampleOutput>
<xsl:apply-templates select="country//literacyRates"/>
</SampleOutput>
</xsl:template>
<xsl:template match="literacyRates">
<literacyRates>
<xsl:attribute name="country" select="ancestor::country/@name"/>
<xsl:attribute name="type" select="name(..)"/>
<xsl:value-of select="."/>
</literacyRates>
</xsl:template>
</xsl:stylesheet>
然后打电话给你的班级(注意缺少的括号):
spl_autoload_register(function ($class_name) {
$aliases = [
'navigation' => 'App\Facades\Navigation',
];
if (array_key_exists($class_name, $aliases) {
include $aliases[$class_name] . '.php';
}
});
了解更多信息 - PHP autoload doc