Кто-нибудь пытался сделать системные функции PHP более объектно-ориентированными? - PullRequest
9 голосов
/ 15 сентября 2008

Мне просто любопытно, существует ли какой-либо проект, который пытается сгруппировать все (или большинство) встроенных функций PHP в более объектно-ориентированную иерархию классов. Например, группирование всех строковых функций в один класс String и т. Д.

Я понимаю, что на самом деле это не решит никаких проблем (если только изменения не произошли на уровне исходного кода PHP), поскольку все встроенные функции по-прежнему будут доступны в глобальном пространстве имен, но это, безусловно, значительно повысит удобство использования. проще.

Ответы [ 4 ]

6 голосов
/ 15 сентября 2008

Слишком много раз. Как только кто-то обнаруживает, что в PHP есть функции OO, он хочет обернуть все в классы.

Смысл OO в PHP заключается в том, что вы можете создавать свои решения любым удобным вам способом. Но упаковка существующих функций в Objects не принесет больших результатов.

При этом ядро ​​PHP уже достаточно объектно-ориентировано. Взгляните на SPL .

5 голосов
/ 15 сентября 2008

Я думаю, что что-то вроде этого является интегральным для PHP, чтобы двигаться вперед. Будучи в основном программистом .Net, я нахожу, что PHP больно работать с его миллионами и одной глобальной функцией. Приятно, что в PHP 5.3 есть пространства имен, но это мало помогает, когда их собственные библиотеки даже не объектно-ориентированы, не говоря уже о том, чтобы использовать пространства имен. Я не возражаю против PHP как языка, но их API ужасно дезорганизован, и, вероятно, он нуждается в полной переработке. Вроде как то, что пережил VB, когда стал VB.Net.

4 голосов
/ 15 сентября 2008

Я не согласен. Объектно-ориентированное программирование не лучше, чем процедурное программирование. Я считаю, что вы не должны использовать ОО, если вам не нужно полиморфное поведение (наследование, переопределение методов и т. Д.). Использование объектов в качестве простых контейнеров для кода не стоит лишних затрат. Это особенно верно для строк, потому что они так часто используются (например, как ключи массива). Каждое приложение обычно может извлечь выгоду из некоторых полиморфных особенностей, но обычно на высоком уровне. Хотели бы вы когда-нибудь расширить класс String?

Кроме того, для понимания нечетных имен PHP-функций необходима небольшая история. PHP основан на стандартах стандартной библиотеки C и POSIX и использует много одинаковых имен функций (strstr, getcwd, ldap_open и т. Д.). На самом деле это хорошая вещь, потому что минимизирует количество кода, связывающего язык, гарантирует, что полностью продуманный набор функций (почти все, что вы можете сделать в C, вы можете сделать в PHP) и эти системные библиотеки высоко оптимизированы (например strchr обычно встроен, что делает его примерно в 10 раз быстрее).

4 голосов
/ 15 сентября 2008

Чтобы ответить на ваш вопрос, да, существует несколько библиотек, которые делают именно то, о чем вы говорите. Что касается того, что вы хотите использовать, это совершенно другой вопрос. PHPClasses и pear.org - хорошие места для поиска таких библиотек.

Обновление: Как и предполагали другие, SPL является хорошей библиотекой и содержит множество встроенных функций php. Однако есть еще множество функций php, которые он не переносит. Оставив нас до сих пор без серебряной пули.

При использовании таких фреймворков, как Cakephp и Zend (и других), я заметил, что они пытаются решить некоторые из этих проблем путем включения своих собственных библиотек и встраивания основ, таких как подключение к БД, в работу фрейма. Таким образом, фреймворки могут быть другим решением

...