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

klr1opcd  于 2023-01-01  发布在  PHP
关注(0)|答案(5)|浏览(125)

我使用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

13z8s7eq

13z8s7eq1#

正如前面在其他答案中所述,使用->意味着您正在访问一个对象,而不是数组。
然而,有时候一个对象可能会被当作一个数组来处理。当它实现ArrayAccess接口时。编码者可以这样做,例如调用$object->field将等价于$object['field'],但他/她不能这样做。
此外,可以将数组视为对象(参见to the manual),但在这种情况下,它不是数组而是对象,并且与上述方法相同。

a7qyws3x

a7qyws3x2#

允许你用->获取属性的变量实际上是对象,而不是数组,它们确实允许['some_key']语法,但这并不意味着它们是数组,它们不是。
你可以阅读更多关于对象on this page of the PHP manual的内容。

eyh26e7m

eyh26e7m3#

这些不是数组,它们是objects

h22fl7wq

h22fl7wq4#

这是因为它不是一个数组,而是一个对象变量。
例如:

class MyObject{

   var $myVariable = 'test';

}

$MyObject = new MyObject();
echo $MyObject->myVariable; // Would return 'test'
busg9geu

busg9geu5#

要实现这一点,只需使用stdclass强制转换

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

你可以通过

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

如Voitcus回答所述
使用-〉意味着你正在访问一个对象,而不是数组。
所以如果你坚持使用破折号arror(-〉),你可以将你的数组转换为对象(这会使你的程序消耗更多的内存)

相关问题