【问题标题】:PHP - extracting array values ( square brackets vs arrow notation )PHP - 提取数组值(方括号与箭头符号)
【发布时间】:2014-10-03 14:48:08
【问题描述】:

我有一个对象,当我使用 var_dump 时,我得到以下信息:

var_dump($object);

array (size=7)
  'id' => int 1969
  'alt' => string '' (length=0)
  'title' => string 'File Name' (length=9)
  'url' => string 'http://location/file.pdf' (length=24)

当我 echo $object[url] 它返回 string 'http://location/file.pdf' (length=24),但是当我 echo $object->url 我得到 null。 (这有时适用于从数组中提取值,我只是不确定在哪种情况下或哪种类型的数组)

问题是我使用具有 git 功能的托管服务提供商,当我推送我的更改时,它会检查 PHP 代码并遇到语法错误(意外的 '['),这会停止推送。

我的本​​地服务器使用PHP 5.4.16,主机使用5.3.2

从更广泛的角度来看,有人可以指出一个资源来解释这两种从数组中提取值的方法之间的区别吗?非常感谢!

【问题讨论】:

  • $var->foo 是一个对象引用。 $var[foo] 是一个数组引用。虽然这种思想可以在某些语言(如 javascript)中互换使用,但在 PHP 中,数组和对象是完全不同的两件事。

标签: php arrays


【解决方案1】:

您不能以这种方式访问​​数组:->,仅适用于以下对象:

$x = (object) array('a'=>'A', 'b'=>'B', 'C'); gives you:

stdClass Object
(
    [a] => A
    [b] => B
    [0] => C
)

要访问这些值,您必须像这样使用-> 进行操作:

$valA = $x->a;

【讨论】:

    【解决方案2】:

    你没有对象,你有一个关联数组。请注意var_dump() 输出中的第一个词是:

    array
    

    因此$object->url 没有任何意义,实际上应该给你一个关于尝试访问非对象属性的错误。

    我无法想象任何与 PHP 相关的语法检查过程会在$foo['bar'] 之类的内容上引发错误。它是对象还是数组通常无法通过简单的语法检查来确定。不过,您可能在前面的某个地方还有其他错别字导致了这种情况。

    【讨论】:

    • 也就是说,-> 用于使用实现ArrayAccess 的对象访问object
    • 是的,我也对这个错误感到惊讶,但它只在存在括号符号时才会发生。
    • @PeteSorensen 也许是您的托管服务提供商的问题(或者看看您是否可以让他们轮流进行语法检查,因为将其作为推送过程的一部分运行似乎很奇怪。
    • 同意。感谢您的帮助。
    • @PeteSorensen 在您的情况下,要获取 url,您需要执行 $object['url']。当然,在这种情况下,$object 是一个非常糟糕的变量名称。
    猜你喜欢
    • 2020-03-01
    • 2011-07-05
    • 1970-01-01
    • 2016-05-28
    • 2018-09-28
    • 2012-09-17
    • 1970-01-01
    相关资源
    最近更新 更多