2008-09-15 1 views
9

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

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

ответ

4

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

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

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

5

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

+1

Согласовано, но ... их документация не имеет себе равных. – 2008-09-15 02:07:48

+0

Я определенно согласен, мне бы хотелось, чтобы это было приоритетом для PHP 6. Так как теперь они выпускают поддержку пространства имен в предстоящих 5.3, я надеюсь, что следующий логический шаг - начать перемещать свои стандартные библиотечные функции в свою собственную иерархию имен/классов. – Wilco 2008-09-15 02:17:57

+0

Остается только надеяться – SeanDowney 2008-09-15 03:21:51

6

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

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

Это, как говорится, ядро ​​PHP уже объектно ориентировано. Взгляните на SPL.

4

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

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

Смежные вопросы