PHP:像对象一样对待数组(比如在js中)

时间:2016-02-17 13:56:28

标签: php arrays

在JS中你可以有这样的东西:

var a = [1, 2, 3];
a.myProp = false;

这是可能的,因为在js数组中实际上是对象。

我想要做的是实现相同的,但在PHP中。

我找到的最接近的解决方案是使用ArrayObject类,但这个“解决方案”的主要问题是它是对象,当您使用is_array检查或尝试使用其他特定的数组方法,它将返回false或抛出错误。

有没有像__construct这样神奇的php方法,或者类似于数组?

一般情况下 - 我想添加一些与数组值分开的标志。例如:

$a = [1, 2, 3];

$a.alreadyIterated = false;

foreach ($a as $item) {
...
}

$a.alreadyIterated = true;
...

if (!$a.alreadyIterated) {
    foreach($a as $item) {...}
}

1 个答案:

答案 0 :(得分:0)

在某种程度上可以通过创建自己的类来实现:

class PropArray implements ArrayAccess, Iterator {
   public $alreadyIterated = false;
   protected $a = []; # internal array for iterable values

   # add required methods from the interfaces, pretty easy
}

实例仍然是对象,但可以像数组一样进行迭代并通过is_array($obj) || $obj instanceof Traversable进行测试。