为什么在ArrayObject
类as方法中只有几个php数组函数可用?例如,asort()
是可用的,但walk()
和其他许多都不可用。
$s= new ArrayObject(array(1,3,4,5,6,4));
$x= $s->asort(); //implemented
$x= $s->sum(); //not implemented
$x= array_sum($s->getArrayCopy()); //not an OO manner!
//sum is an example, consider:array_map,array_walk,array_merge ....
请注意,我已经仔细阅读了文件。我的问题是为什么php团队只是在
ArrayObject
类中嵌入了数组函数的子集(这应该封装与数组相关的需求)。这不是个糟糕的设计吗?为什么我们要扩展这个类并在这个类中再次嵌入数十个函数?是合理的吗?
最佳答案
想想一个对象集合应该能够以本机方式轻松地完成什么。如果我有一个藏书集,我希望能够对它们进行排序,我希望能够在某个位置得到一本,我希望能够遍历它们,等等。我不希望能够将它们全部加起来。如果我给那个对象添加了一个sum函数,那就意味着这个对象的每个实例都会有一个sum函数——这在很大程度上是一个奇怪和意外的用例。ArrayObject
在很多意义上比php的array
更接近传统数组的概念。我相信这样会更快。