将数组定义为类的属性时出现语法错误

时间:2012-02-10 09:37:09

标签: php object

...

public $aSettings = array(
  'BindHost' => "127.0.0.1",
  'Port' => 9123,
  'MaxFileSize' => (5 * (1024 * 1024)), // unexpected "(" here
  'UploadedURL' => "http://localhost",
  'UploadPath' => dirname(__FILE__) . "/upload",
  'UploadMap' => dirname(__FILE__) . "/uploads.object",
  'RegisterMode' => false
);

...

这是我的代码,直接来自一个班级。我遇到的问题是"unexpected ( on line 22",第22行是MaxFileSize

我看不出它的问题,这是Zend Engine的限制吗?或者我是盲目的。

6 个答案:

答案 0 :(得分:8)

在5.6之前的PHP版本中初始化类属性时,不能使用非常量值
这些在编译时初始化,PHP将不进行任何计算或执行任何代码。 (5 * (1024 * 1024))是一个需要评估的表达式,你不能在那里做。要么使用常量值5242880替换它,要么在__construct中进行计算。

PHP,5.6于2014年推出,allows "constant scalar expressions"其中标量常量或类属性可以由类定义中的计算表达式而不是构造函数初始化。

答案 1 :(得分:3)

我怀疑这不是整个代码,这是一个类中的静态变量的定义,你在表达式中非常有限,并且无法计算很多。

如果我是对的,你可能想要做那样的事情:

class thingamajig {
    public static $aSettings;
};
thingamajig::$aSettings = array ( ... );

P.S。对不起,我刚刚读了你的散文,你确认它是类静态变量的一部分。因此,您不能忽略不合适的关键字。

答案 2 :(得分:3)

我假设您展示的内容实际上是一个类属性(因为public关键字)。 PHP中类属性的初始化必须是常量。

  

这个声明可能包括初始化,但是这个   初始化必须是一个常量值 - 也就是说,它必须能够   在编译时进行评估,不得依赖于运行时   信息以便进行评估。

http://www.php.net/manual/en/language.oop5.properties.php

答案 3 :(得分:1)

在类中定义变量时,无法为其指定表达式。 (5 * (1024 * 1024))是一个表达。 6164480不是。

答案 4 :(得分:0)

自PHP 5.6

起,此限制不再存在

启用以前不允许的语法的新功能称为constant scalar expressions

  

现在可以提供涉及数字的标量表达式   PHP之前的上下文中的字符串文字和/或常量   期望一个静态值,例如常量和属性声明   和默认函数参数。

class C {
    const THREE = TWO + 1;
    const ONE_THIRD = ONE / self::THREE;
    const SENTENCE = 'The value of THREE is '.self::THREE;

    public function f($a = ONE + self::THREE) {
        return $a;
    }
}

echo (new C)->f()."\n"; echo C::SENTENCE; ?>
     

以上示例将输出:

4 The value of THREE is 3

答案 5 :(得分:-3)

Public是仅在对象中使用的声明。这不是一个对象,删除公共,没关系。