缺少PHP中数组的基础知识
有人能解释为什么这不起作用吗:缺少PHP中数组的基础知识,php,arrays,Php,Arrays,有人能解释为什么这不起作用吗: private static $bundles = array( 'page-builder' => array( 'Freya\\Bundle\\PageBuilder' => self::$baseDir . '/freya-bundle-pagebuilder/Freya/Bundle/PageBuilder' ); ); self::$baseDir是\uuuu DIR\uuuu。我认为在运行时PHP会对此进行
private static $bundles = array(
'page-builder' => array(
'Freya\\Bundle\\PageBuilder' => self::$baseDir . '/freya-bundle-pagebuilder/Freya/Bundle/PageBuilder'
);
);
self::$baseDir
是\uuuu DIR\uuuu
。我认为在运行时PHP会对此进行评估,并将其保存为path/to/some/dir/freya-…
确切的错误是:
分析错误:语法错误,第51行的/vagrant/local dev/content/mu plugins/Freya mu/bundles/BundleLoader.php中出现意外的“$baseDir”(T_变量),需要标识符(T_字符串)或类(T_类)
第51行是:'Freya\\Bundle\\PageBuilder'=>self:$baseDir'/freya bundle pagebuilder/freya/bundle/pagebuilder'
所以。。。我遗漏了什么?正确的方法是什么
PHP版本:5.5在类中声明属性时不能使用变量。检查中的无效属性声明
PHP不允许这样做。PHP属性可以初始化为常量值,但只能使用编译时可用的常量值。从: 该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算 静态属性
$baseDir
包含的任何值在类定义实际执行(即运行时)之前都不可用
通过使用类常量,可以在一定程度上解决此问题:
类常量在编译时求值,这是您需要做的。但是请注意,您不能执行任何其他操作(例如,将$property
初始化为self::MY_CONSTANT*3
)
我建议将
self:::$baseDir
完全从属性中删除,或者在构建过程中或在实际使用属性时将其插入。除了其他答案之外,PHP 5.5不允许在默认值定义中使用表达式,包括串联,但5.6允许。()
因此,基本上,要么升级PHP版本,要么从方法中设置$bundles的值。否则您的数组就没有问题。如果
var\u dump(self::$baseDir)
,您会得到什么?
<?php
class SimpleClass
{
// invalid property declarations:
public $var1 = 'hello ' . 'world';
public $var2 = <<<EOD
hello world
EOD;
public $var3 = 1+2;
public $var4 = self::myStaticMethod();
public $var5 = $myVar;
class AClass {
const MY_CONSTANT = 42;
protected $property = self::MY_CONSTANT;
}