PHP使用短划线箭头“ - >”检索数组值

时间:2013-05-18 21:57:21

标签: php arrays zend-framework2

我一直在使用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中越来越多,我遇到的问题是我需要改变我获得该值的方式。 这有意义吗?我当然感谢任何帮助。 谢谢, 格雷格

5 个答案:

答案 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 回答所述

<块引用>

使用 -> 意味着您正在访问一个对象,而不是一个数组。

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