PHP中array()语法的矛盾行为

时间:2011-11-11 20:59:07

标签: php arrays

我在Ubuntu上使用PHP 5.3。我想分享一对代码片段,并想知道这种矛盾的原因,以便初始化相关的数组。

案例1:课程的一部分

class ui_template extends ui\ui_component{
   private $path = __DIR__."/templates";
   private $properties_template = array('path' => __DIR__.'/templates', 'file' => 'mytemplate.php', 'engine' => 'php'); // Parse error: syntax error, unexpected '.', expecting ')'
   private $properties_template = array('path' => $path, 'file' => 'mytemplate.php', 'engine' => 'php'); // Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION

案例2:简单脚本的一部分

$path = __DIR__ . "/templates";
$temp = new widget\ui_template('new_template');
$temp->extend_template(NULL, array('path' => __DIR__."/templates")); // works fine
$temp->extend_template(NULL, array('path' => $path)); // works fine
  • 在第3行的第一种情况下,在定义.时报告path上的错误很奇怪,意味着在那里不允许连接。虽然在案例2中没有这样的错误。

  • 在第4行第一种情况下,也不允许变量初始化path

2 个答案:

答案 0 :(得分:1)

定义属性时只允许声明。你不能使用任何运算符(如串联(不是“矛盾”!)),或在那里运作。

答案 1 :(得分:1)

声明类属性时,不能使用计算值。它们必须是常量(文字字符串,数字等)。 Docs

  

使用public,protected或者关键字之一定义它们   private,后跟一个正常的变量声明。这个宣言   可能包括初始化,但这个初始化必须是a   常量值 - 也就是说,它必须能够在编译时进行评估   时间并且不得依赖于运行时信息   评价。