...
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引擎的限制吗?还是我瞎了眼?
对我来说很好->codepad.org/eiorttq….我猜在类中定义非常量变量是个问题
你刚刚试过移除外部的( )吗?或者只是这条线上的所有( ),因为在做乘法时不需要它们……
我删除了public访问说明符,它工作正常
在这方面,傻瓜对类似问题的回答是有用的。虽然它使用了与MichaelKrelin相同的方法,但它显示了一种在类定义中包含初始化逻辑的方法。
在5.6之前的PHP版本中初始化类属性时,不能使用非常量值。它们在编译时初始化,在编译时PHP将不进行计算或执行任何代码。(5 * (1024 * 1024))是一个需要计算的表达式,您不能这样做。要么用定值5242880代替,要么在__construct中进行计算。
2014年引入的php 5.6允许"常量标量表达式",其中标量常量或类属性可以由类定义中的计算表达式而不是构造函数初始化。
谢谢,我不知道。我将把操作转移到我的结构中。
很好的解释!+ 1
我假设您所显示的实际上是一个类属性(由于public关键字)。PHP中类属性的初始化必须是常量。
This declaration may include an initialization, but this
initialization must be a constant value--that is, it must be able to
be evaluated at compile time and must not depend on run-time
information in order to be evaluated.
http://www.php.net/manual/en/language.oop5.properties.php
我怀疑这不是整个代码,这是一个类中静态变量的定义,在这个类中,表达式非常有限,不能计算很多。
如果我是对的,你可以做类似的事情:
class thingamajig {
public static $aSettings;
};
thingamajig::$aSettings = array ( ... );
抱歉,我刚刚读了你的散文,你确认它是类静态变量的一部分。所以你不能忽略不恰当的关键词。
确实不是所有的代码,它是从一个类文件中提取的,我去掉了周围的代码。
是的,现在读。一开始,它太明显了,无法读完。)
在类中定义变量时,不能将表达式赋给它。(5 * (1024 * 1024))是一个表达式。6164480不是。
从技术上讲,6164480也是一个表达式,只是一个非常简单的表达式。o)
隐马尔可夫模型。。。是的,@deceze描述得更准确了:)
从php 5.6开始,这个限制就不再存在了。
启用以前不允许的语法的新功能称为常量标量表达式:
It is now possible to provide a scalar expression involving numeric
and string literals and/or constants in contexts where PHP previously
expected a static value, such as constant and property declarations
and default function arguments.
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()."
"; echo C::SENTENCE; ?>
The above example will output:
4 The value of THREE is 3
public是一个只在对象中使用的声明。这不是一个对象,移除公共对象,这很好。
代码取自对象,因此忽略public关键字。
好吧,我把它拿出来了,php-l没有出错,所以这个错误在其他地方,即使它在那里报告。