24

我已经使用 PHP 有一段时间了,但从来都不是高级程序员。我觉得这是一个愚蠢的问题,但从来不明白为什么可以使用不同的方法检索某些数组值:

这个:

$array->value

而不是正常的:

$array['value']

标准的 $array['value'] 始终有效,但使用 -> 方法的方法有时无效。这是为什么?

这是一个例子。我正在使用 Zend Framework 2,我可以使用 -> 方法获取会话值:

$this->session->some_value

但是,如果我做一个新的普通数组,我就不能:

$array = array('some_value' => 'myvalue');
$array['some_value']; // works!!
$array->some_value;  // does not work :(

在 Zend Framework 1 中,大多数数组都可以以这种方式正常工作,而在 ZF2 中,我遇到的问题越来越多,我需要更改获取该值的方式。这有意义吗?我当然感谢任何帮助。谢谢,格雷格

4

5 回答 5

25

如前在其他答案中所述,使用->意味着您正在访问一个对象,而不是一个数组。

但是,有时可能会将对象视为数组。它是在实现ArrayAccess接口时。编码器可以这样做,例如。call$object->field相当于$object['field'],但他/她不能。

此外,可以将数组视为对象(请参阅手册),但是在这种情况下,它不是数组而是对象,并且与上述方式相同。

于 2013-05-18T22:05:31.123 回答
2

允许您获取属性的变量->实际上是对象,而不是数组。它们确实允许['some_key']语法,但这并不意味着它们是数组。他们不是。

您可以在 PHP 手册的这个页面上阅读更多关于对象的信息。

于 2013-05-18T22:00:13.490 回答
1

那些不是数组,它们是对象

于 2013-05-18T22:00:44.283 回答
1

那是因为它不是数组而是对象变量。

例如;

class MyObject{

   var $myVariable = 'test';

}

$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'
于 2013-05-18T22:09:29.413 回答
0

为了让它发生,只需使用 stdclass 演员表

$optionsType = array(
    (object)  array("text" => "Virtual Account", "value" => "TOPUPVA"),

你可以通过

foreach($optionsType as $key=>$value){
    var_dump($value->text);

正如 Voitcus 的回答所说

using -> 表示您正在访问一个对象,而不是一个数组。

因此,如果您坚持使用破折号 (->),则可以将数组转换为对象(这会使您的程序消耗更多内存)

于 2021-02-19T17:31:14.997 回答