[使用PHP 5.5]
因此,我试图创建一种解决方案,以便在将Twig函数追加到$this->functions
(一个填充了我希望Twig扩展的函数的数组)后加载它们
class Twig
{
private $twig;
private $templatesBaseDir = "../app/views";
private $functions = [
"lipsum" => function ($pcount, $psize) {
return file_get_contents("http://loripsum.net/api/{$pcount}/{$psize}/headers");
}
];
/**
* Sets Twig Environment configs
*/
public function __construct()
{
$this->twig = new \Twig_Environment($this->loadViews(), [
"debug" => true,
// "cache" => "/cache",
"auto_reload" => true,
]);
}
/**
* Returns Twig setup (environment configs + templates path)
*/
public function loadTwig()
{
return $this->twig;
}
private function loadTwigFunctions()
{
foreach ($this->functions as $name => $closure) {
$$name = new \Twig_Function($name, $closure);
$this->twig->addFunction($$name);
}
}
}
问题是PHP返回"lipsum" => function ($pcount, $psize) {
行的错误:
意外的“函数”(T_FUNCTION),需要标识符(T_STRING)
我已经使用数组和匿名函数在全局范围内对该方法进行了一些测试,并且按预期方式工作,我想将其与类属性或类似属性一起使用时可能会出现问题,不确定。
(这是我在这里的第一个问题,所以让我知道是否需要更多信息)
答案 0 :(得分:3)
问题在于您的财产的初始价值。
...通过使用以下关键字之一定义:public,protected或 私有,然后是普通的变量声明。这个宣言 可能包含初始化,但此初始化必须是 常数值-也就是说,必须能够在编译时求值 时间,并且不得依赖于运行时信息 评估。
由于匿名函数无法在编译时求值,因此无法在此处进行设置。
例如在构造函数中设置$this->functions
的值,它应该可以正常工作。