有没有人试图使PHP的系统功能更加面向对象?

时间:2020-03-05 18:53:08  来源:igfitidea点击:

我只是想知道是否存在任何试图将所有(或者大部分)PHP内置函数分组为一个更加面向对象的类层次结构的项目。例如,将所有字符串函数分组为单个String类,等等。

我意识到这实际上并不会解决任何问题(除非在PHP源代码级别进行了修改),因为所有内置函数仍可在全局名称空间中访问,但它无疑会使可用性变得更加容易。

解决方案

回答

我认为这样的事情对于PHP的发展至关重要。作为主要的.Net程序员,我发现PHP难以使用它的100万个和1个全局函数。 PHP 5.3具有名称空间是很好的,但是当它们自己的库甚至不面向对象时,它也无济于事,更不用说使用名称空间了。我不太在意PHP作为一种语言,但是它们的API却杂乱无章,它可能需要进行彻底的检查。有点像VB成为VB.Net时经历的过程。

回答

方式太多了。一旦有人发现PHP具有OO功能,他们便想将所有内容包装在类中。

在PHP中使用OO的要点是,我们可以按照自己想要的任何方式来构造解决方案。但是将现有功能包装在Objects中并不会带来很多收益。

话虽这么说,PHP的核心已经非常面向对象。看一下SPL。

回答

要回答问题,是的,存在一些完全可以满足我们所谈论内容的库。至于我们要使用哪一个,则是一个完全不同的问题。 PHPClasses和pear.org是开始寻找此类库的好地方。

更新:
正如其他人所建议的那样,SPL是一个很好的库,并且包装了许多内置的php函数。但是,仍然有很多PHP函数没有包装。让我们一动不动。

在使用Cakephp和Zend之类的框架(也有其他框架)时,我注意到它们试图通过包括自己的库并在框架中建立诸如DB连接之类的基础来解决其中的一些问题。所以框架可能是另一种解决方案

回答

我不同意面向对象的编程在本质上并不比过程编程好。我相信除非需要多态行为(继承,覆盖方法等),否则不应该使用OO。使用对象作为代码的简单容器是不值得的。对于字符串来说尤其如此,因为字符串使用了很多(例如作为数组键)。通常,每个应用程序都可以从某些多态功能中受益,但通常都是高水平的。我们是否想扩展String类?

另外,了解PHP的奇数函数命名也需要一些历史。 PHP以标准C库和POSIX标准为基础,并使用许多相同的函数名(strstr,getcwd,ldap_open等)。这实际上是一件好事,因为它可以最大程度地减少语言绑定代码的数量,确保完整的,经过深思熟虑的功能集(几乎可以在C中完成任何事情,也可以在PHP中完成)并且这些系统库得到了高度优化(例如strchr通常是内联的,这使其速度提高了约10倍)。