首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >糟糕的PHP ArrayObject设计

糟糕的PHP ArrayObject设计
EN

Stack Overflow用户
提问于 2011-08-25 13:10:48
回答 3查看 1.5K关注 0票数 3

为什么在ArrayObject类中只有几个数组函数可用呢?例如,asort()可用,但walk()和许多其他软件不可用。

代码语言:javascript
复制
$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类中嵌入了数组函数的一个子集(它应该封装与数组相关的请求)。这不是一个糟糕的设计吗?为什么我们要扩展这个类,并在这个类中再次嵌入几十个函数?是合理的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 13:33:29

想一想,一个对象集合应该能够以本机和容易的方式做什么。如果我有一个藏书,我希望能够对它们进行排序,我希望能够在某个位置获得一个,我希望能够遍历它们,等等。我不想要的是能够将它们全部相加。如果我向该对象添加一个sum函数,就意味着该对象的每个实例也会有一个sum函数--这在很大程度上是一种奇怪的、意想不到的用例。

在很多意义上,ArrayObjectarray更接近传统数组的概念。我相信由于这个原因,它应该会更快。

票数 5
EN

Stack Overflow用户

发布于 2011-08-25 13:26:10

ArrayObject不仅仅适用于需要进行求和运算的数组,如整型/浮点型。并不是所有的ArrayObject类型对象都需要array_sum。您应该像NumberArrayObject一样对ArrayObject进行扩展,使其具有sum方法。

票数 2
EN

Stack Overflow用户

发布于 2011-08-25 13:35:53

* Array functions page上的一切都打破了这个面向对象的原则。

*所有不在this page上的东西。

原因很简单:当PHP被创建时,他们脑海中并没有太多的OOP标准。OOP是后来添加的,并在PHP5中得到了改进。PHP创建时,原语(和数组)不被视为对象,因此这些函数是存在的。将函数与它们相关联的数据类型结合起来当然是有意义的,但PHP将始终保留其原始的数组函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7185427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档