php定义类属性为数组,关于php:将数组定义为类的属性时出现语法错误

...

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没有出错,所以这个错误在其他地方,即使它在那里报告。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值