为什么在ArrayObject类中只有几个数组函数可用呢?例如,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类中嵌入了数组函数的一个子集(它应该封装与数组相关的请求)。这不是一个糟糕的设计吗?为什么我们要扩展这个类,并在这个类中再次嵌入几十个函数?是合理的吗?
发布于 2011-08-25 13:33:29
想一想,一个对象集合应该能够以本机和容易的方式做什么。如果我有一个藏书,我希望能够对它们进行排序,我希望能够在某个位置获得一个,我希望能够遍历它们,等等。我不想要的是能够将它们全部相加。如果我向该对象添加一个sum函数,就意味着该对象的每个实例也会有一个sum函数--这在很大程度上是一种奇怪的、意想不到的用例。
在很多意义上,ArrayObject比array更接近传统数组的概念。我相信由于这个原因,它应该会更快。
发布于 2011-08-25 13:26:10
ArrayObject不仅仅适用于需要进行求和运算的数组,如整型/浮点型。并不是所有的ArrayObject类型对象都需要array_sum。您应该像NumberArrayObject一样对ArrayObject进行扩展,使其具有sum方法。
发布于 2011-08-25 13:35:53
* Array functions page上的一切都打破了这个面向对象的原则。
*所有不在this page上的东西。
原因很简单:当PHP被创建时,他们脑海中并没有太多的OOP标准。OOP是后来添加的,并在PHP5中得到了改进。PHP创建时,原语(和数组)不被视为对象,因此这些函数是存在的。将函数与它们相关联的数据类型结合起来当然是有意义的,但PHP将始终保留其原始的数组函数。
https://stackoverflow.com/questions/7185427
复制相似问题