我一直在使用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中越来越多,我遇到的问题是我需要改变我获得该值的方式。 这有意义吗?我当然感谢任何帮助。 谢谢, 格雷格
答案 0 :(得分:20)
如前所述,在其他答案中,使用->
表示您正在访问对象,而不是数组。
但是,有时可能会将对象视为数组。它是在实现ArrayAccess
接口的时候。编码器可以这样做,例如。调用$object->field
等同于$object['field']
,但他/她不得。
此外,可以将数组视为对象(参考to the manual),但在这种情况下,它不是数组而是对象,与上面的方法相同。
答案 1 :(得分:2)
允许您获取->
属性的变量实际上是对象,而不是数组。它们允许['some_key']
语法,但这并不意味着它们是数组。他们不是。
您可以阅读有关对象on this page of the PHP manual的更多信息。
答案 2 :(得分:1)
这些不是数组,它们是objects。
答案 3 :(得分:1)
那是因为它不是一个数组,它是一个对象变量。
例如;
class MyObject{
var $myVariable = 'test';
}
$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'
答案 4 :(得分:0)
为了让它发生,只需使用 stdclass 演员
$optionsType = array(
(object) array("text" => "Virtual Account", "value" => "TOPUPVA"),
你可以通过
访问它foreach($optionsType as $key=>$value){
var_dump($value->text);
如 Voitcus 回答所述
<块引用>使用 -> 意味着您正在访问一个对象,而不是一个数组。
因此,如果您坚持使用破折号 (->),那么您可以将数组转换为对象(这会使您的程序消耗更多内存)