我使用PHP已经有一段时间了,但从来不是一个高级程序员。我觉得这是一个愚蠢的问题,但从来没有理解为什么一些数组值可以使用不同的方法检索:
这一点:
$array->value
而非正常:
$array['value']
标准的$array ['value ']总是有效,但是使用-〉方法的$array有时候不起作用,为什么呢?
下面是一个例子,我使用的是Zend Framework 2,可以使用-〉方法获取会话值:
$this->session->some_value
但是,如果我使用一个新的普通数组,就不行了:
$array = array('some_value' => 'myvalue');
$array['some_value']; // works!!
$array->some_value; // does not work :(
在ZendFramework1中,大多数数组都能以这种方式正常工作,而在ZF2中,我越来越多地遇到这样的问题:我需要更改获取值的方式。这样做有意义吗?我当然感谢任何帮助。谢谢,Greg
5条答案
按热度按时间13z8s7eq1#
正如前面在其他答案中所述,使用
->
意味着您正在访问一个对象,而不是数组。然而,有时候一个对象可能会被当作一个数组来处理。当它实现
ArrayAccess
接口时。编码者可以这样做,例如调用$object->field
将等价于$object['field']
,但他/她不能这样做。此外,可以将数组视为对象(参见to the manual),但在这种情况下,它不是数组而是对象,并且与上述方法相同。
a7qyws3x2#
允许你用
->
获取属性的变量实际上是对象,而不是数组,它们确实允许['some_key']
语法,但这并不意味着它们是数组,它们不是。你可以阅读更多关于对象on this page of the PHP manual的内容。
eyh26e7m3#
这些不是数组,它们是objects。
h22fl7wq4#
这是因为它不是一个数组,而是一个对象变量。
例如:
busg9geu5#
要实现这一点,只需使用stdclass强制转换
你可以通过
如Voitcus回答所述
使用-〉意味着你正在访问一个对象,而不是数组。
所以如果你坚持使用破折号arror(-〉),你可以将你的数组转换为对象(这会使你的程序消耗更多的内存)