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

StackOverflow https://stackoverflow.com/questions/61784

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top