3

I have a Form object $form. One of its variables is a Field object which represents all fields and is an array (e.g $this->field['fieldname']). The getter is $form->fields().

To access a specific field method (to make it required or not for example) I use $form->fields()['fieldname'] which works on localhost with wamp but on the server throws this error:

Parse error: syntax error, unexpected '[' in (...)

I have PHP 5.3 on the server and because I reinstalled wamp and forgot to change it back to 5.3, wamp runs PHP 5.4. So I guess this is the reason for the error.

How can I access an object method, which returns an array, by the array key with PHP 5.3?

4

3 回答 3

3

从 PHP 5.4 开始可以取消引用数组,而不是 5.3

PHP.net:

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

于 2013-07-09T10:27:40.147 回答
2

问题中描述的数组取消引用是仅在 PHP 5.4 中添加的功能。PHP 5.3 无法做到这一点。

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

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

为了在 PHP 5.3 中进行这项工作,您需要执行以下操作之一:

  1. 使用临时变量:

    $temp = $form->fields()
    echo $temp['fieldname'];
    
  2. 将字段数组作为对象属性而不是从方法输出:
    即 this....

    echo $form->fields['fieldname']
    

    ...完全有效。

  3. 或者,当然,您可以将服务器升级到 PHP 5.4。请记住,由于 5.5 已经发布,5.3 将很快宣布终止使用,所以无论如何您迟早都会想要升级;也许这是你的暗示?(不用担心;从 5.3 到 5.4 的升级路径非常简单;没有什么真正会破坏的,除了那些已经被弃用的东西)

于 2013-07-09T10:32:44.387 回答
1

如前所述,数组取消引用只能在 5.4 或更高版本中实现。但是您可以保存对象并稍后访问这些字段:

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

AFAIK没有其他选择。

于 2013-07-09T10:31:58.400 回答