gpt4 book ai didi

php - 在 PHP 中实现类似 .Net Collection 的类

转载 作者:行者123 更新时间:2023-12-02 14:51:17 24 4
gpt4 key购买 nike

所以,我想实现这样的东西:

class Collection{
private $array;
public function add($object){
array_push($this->array, $object);
}
public function array(){
return $this->array;
}
}
class JustaClass{
public $myCollection;
public function __construct(){
$this->myCollection = new Collection();
}
}

$justAnObject = new JustaClass();
$justAnObject->myCollection->add(new SomeObject());

这工作得很好,但我想像在.Net中那样使用它,即,当我想引用集合对象时,我想直接这样做,例如:

foreach($justAnObject->myCollection as $collectionItem)

不喜欢

foreach($justAnObject->myCollection->array() as $collectionItem)

有什么办法可以做到这一点吗?也许是一个神奇的方法,或者实现一个类似 Iiterator 的接口(interface)?

谢谢

最佳答案

其实,就是这个SplObjectStorage是的,所以不需要编写任何代码:

The SplObjectStorage class provides a map from objects to data or, by ignoring data, an object Set. This dual purpose can be useful in many cases involving the need to uniquely identify objects.

它实现了CountableIteratorArrayAccess,所以你可以foreach它,用访问它>[] 并对其使用 count 。正如描述所说,它是一个 Set,因此它不包含重复元素。

如果你想允许重复元素,你可以简单地使用ArrayIteratorArrayObject。您可以在

中找到与各种 .NET 集合类似的其他数据结构

IMO,编写自定义类是没有意义的,除非您还需要自定义上述任何选项的行为。

关于php - 在 PHP 中实现类似 .Net Collection 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8225286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com