如何访问对象';的数字属性


How to access an object's numeric property

当我运行此位时

$data = (object)array(1,2,3);
print_r($data);

我得到

stdClass Object
(
    [0] => 1
    [1] => 2
    [2] => 3
)

这很有趣,因为到目前为止我已经知道对象的属性名称不能以数字开头。所以,如果这是真的,那一定意味着这些值不是属性,但它们是什么?

我尝试访问值的几种方法

$data[0]; // Fatal error:  Cannot use object of type stdClass as array
$data->0; // Parse error:  syntax error, unexpected 0, expecting identifier
$data->{0}; // Notice:  Undefined property: stdClass::$0

如果这些值不是属性,也不是索引值,那么我对访问这些值并不是很感兴趣,而是想知道它们是如何保存在类中的。

我认为现在不可能,你需要一些技巧来解决这个问题。可能遵循技术

<?php
$data = (object)array(1,2,3);
$newData = array();
foreach($data as $k=>$v){
    print "key: $k, value: $v<br />";
    $newData[$k] = $v;
}
print $newData[0];

我不确定你的情况。如果你解释了几行,那将对很有帮助

我真的不感兴趣的是访问这些值,而不是找到如果它们不是属性并且不是索引值。

这意味着深入PHP的内部,这可能是而不是你想要找到自己的地方。你必须检查PHP自己的源代码,看看在这些情况下到底发生了什么。

你想知道具体的原因吗?

不能简单地访问,因为变量(类中的attribut)名称不能以数字开头。所以这就是->0是错误的原因。

如果要使用[]访问类的属性,则必须实现接口ArrayAccess:http://php.net/manual/fr/class.arrayaccess.php

实现后,您将能够访问$data[0]:)