【问题标题】:PHP 5.3 accessing array key from object getterPHP 5.3 从对象获取器访问数组键
【发布时间】:2013-07-09 10:24:06
【问题描述】:

我有一个表单对象 $form。它的一个变量是一个 Field 对象,它代表所有字段并且是一个数组(例如$this->field['fieldname'])。吸气剂是$form->fields()

要访问特定的字段方法(例如是否需要),我使用$form->fields()['fieldname'],它在带有 wamp 的 localhost 上工作,但在服务器上抛出此错误:

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

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

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

【问题讨论】:

标签: php arrays object


【解决方案1】:

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

PHP.net:

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

【讨论】:

  • 谢谢。不幸的是,这意味着我无法修改我的 $form 对象(因为 $form->fields() 有很多设置器),因为使用临时变量只会对显示有用。
【解决方案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. 将字段数组作为对象属性而不是从方法输出:
    即这个....

    echo $form->fields['fieldname']
    

    ...完全有效。

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

【讨论】:

  • 干杯!我需要说服我的主机给我 5.4,他们只为新帐户提供它,这有点荒谬......
【解决方案3】:

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

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

AFAIK 没有其他选择。

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    相关资源
    最近更新 更多