是有可能使stdClass的对象工作就像一个一般索引数组?

即。 $阵列=阵列 ( [0] => 120 [1] => 382 [2] => 552 [3] => 595 [4] => 616 )

将构成像

$a = array();
$array[] = 120;
$array[] = 382;

但是,如果我做,与一个对象,它只是将覆盖本身:

$obj = new stdClass;
$obj->a = 120;
$obj->a = 382;

我知道我可以改变“一个”每一次,

对不起,如果这是一个愚蠢的问题,但它绊倒了我出于某种原因!

欣赏任何帮助:)

有帮助吗?

解决方案

在短,没有,因为你总是要命名的属性。通过编写一个简单的类了ArrayAccess的麻烦去是没有意义不管是你已经基本上重新一无所有的数组来显示它除了在性能和透明度极端的牺牲。

是否有某种原因,您的问题不能无限更简单地通过使用阵列解决,或者这只是一个愿望-I-知道的问题?

编辑:查核为这个问题的详细信息。

其他提示

没有,你不能。使用括号([])那样的被称为“了ArrayAccess”在PHP,并且没有在stdClass对象上执行。

这听起来像您可能想是这样

$foo = new stdClass();
$foo->items = array();
$foo->items[] = 'abc';
$foo->items[] = '123';
$foo->items[] = 'you and me';

您也可以尝试铸造阵列为stdClass看看会发生什么。

$foo = array();
$foo[] = 'abc';
$foo[] = '123';
$foo[] = 'you and me';
$foo = (object) $foo;
var_dump($foo);

我真的不能明白你的意思做什么,缺

<?php
$obj->a = array();
$obj->a[] = 120;
$obj->a[] = 382;
// ...
?>

您不能简单地“推”的字段到对象上。你需要知道为了不管怎样提取值的字段的名称,所以这几乎是废话。

一个目的是不是一个数组。如果你想数字索引元素,使用数组。

如果你想命名的元素使用任一个对象或一个关联数组。

至于为什么你得到不同的行为,这是因为在阵,你没有指定索引,所以PHP使用数组作为索引的长度。与对象,必须指定的名称(在此情况下的“A”)。

你可能想要做的另一件事是有一个对象,具有构件是一个数组:

$obj = new stdClass;
$obj->arr = array();
$obj->arr[] = 'foo';
$obj->arr[] = 'bar';

也不要忘记你可以投数组的对象:

$obj = (object) array(
    'arr' => array(
        'foo',
        'bar'
    )
);

仅用于OOP的缘故,不使用类。如果你真的想实现这个功能,使用这个类:

class ArrayClass
{
    protected $storage = array();

    public function push($content) {
        $this->storage[] = $content;
        return $this;
    }

    public function get($index) {
        if (isset($this->storage[$index])) {
            return $this->storage[$index];
        } else {
            //throw an error or
            return false;
        }
    }
}

您可以得到正是这一点在JavaScript。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top