PHP 5.3从对象getter访问数组键

3
我有一个Form对象$form。它的变量之一是Field对象,该对象表示所有字段并且是一个数组(例如$this->field['fieldname'])。获取器是$form->fields()。
要访问特定字段方法(例如使其为必填项),我使用$form->fields()['fieldname'],在本地主机上使用wamp可以正常工作,但在服务器上会抛出此错误:
Parse error: syntax error, unexpected '[' in (...)

我的服务器上安装的是PHP 5.3,因为我重新安装了WAMP并忘记将其更改回5.3,所以WAMP运行的是PHP 5.4。所以我想这就是错误的原因。

如何使用PHP 5.3通过数组键访问返回数组的对象方法?


7
使用临时变量:$fields = $form->fields; echo $fields['fieldname']; - Jon
这里简单解释一下,PHP 5.4 中引入的这种行为被称为函数数组解引用。在此处有文档记录:http://php.net/manual/en/migration54.new-features.php。 - lonesomeday
1
可能是5.4解除引用到有效的5.3数组调用的重复问题。 - feeela
更多详情请参考PHP文档:http://php.net/manual/zh/language.types.array.php#example-88 - feeela
可能是PHP解除引用函数结果的语法的重复问题。 - cb0
谢谢 - 我不知道它的名字,所以找不到其他帖子。 - Davor
3个回答

3

从PHP 5.4开始,可以进行数组解引用,而在5.3版本中不行。

PHP.net:

从PHP 5.4开始,可以直接对函数或方法调用的结果进行数组解引用。之前只能使用临时变量。


谢谢。不幸的是,这意味着我不能修改我的$form对象(因为$form->fields()有很多setter),因为使用临时变量只对显示有用。 - Davor

2

正如问题所描述的那样,数组解引用是 PHP 5.4 中新增的特性,PHP 5.3 不支持此功能。

echo $form->fields()['fieldname']

这段代码可以在PHP 5.4及更高版本中运行。

如果要在PHP 5.3中运行,您需要执行以下操作之一:

  1. Use a temporary variable:

    $temp = $form->fields()
    echo $temp['fieldname'];
    
  2. Output the fields array as an object property rather than from a method:
    ie this....

    echo $form->fields['fieldname']
    

    ...is perfectly valid.

  3. Or, of course, you could upgrade your server to PHP 5.4. Bear in mind that 5.3 will be declared end-of-life relatively soon, now that 5.5 has been released, so you'll be wanting to upgrade sooner or later anyway; maybe this is your cue to do? (and don't worry about it; the upgrade path from 5.3 to 5.4 is pretty easy; there's nothing really that will break, except things that were deprecated anyway)


干杯! 我需要说服我的主机给我5.4版本,他们只提供给新账户,这有点荒谬... - Davor

1

如上所述,数组解引用仅适用于5.4或更高版本。但是,您可以保存对象,稍后访问字段:

$fields=$form->fields();
$value=$fields['fieldname']
...

据我所知,没有其他选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接