Концепция модулей в php похожа на Ruby - PullRequest
6 голосов
/ 23 марта 2011

Есть ли что-то похожее на конструкцию ruby ​​ module в php?

В основном мне нужно создать модули для смешивания ч / б разных классов и т. Д.

Я знаю, что в php есть концепция смешивания ч / б разных классов, но не уверен насчетмодули.

1 Ответ

10 голосов
/ 23 марта 2011

В PHP нет миксинов так же, как в Ruby.То есть вы не можете ничего изменить в классе после того, как он был определен, и вы не можете разумно добавлять новые методы в экземпляр после того, как он был создан 1 .PHP only имеет простой старый механизм простого наследования, интерфейсы и составляющие признаки в 5.4.

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

Хотя в PHP 5.3 есть пространства имен, они ограничены хранением функций, классов, констант, свойств и интерфейсов.только, что означает , вы не можете определить переменные как первоклассный член пространства имен .Попытка сделать это приводит к тому, что они определяются в корневом пространстве имен, а это, конечно, не то, что кто-то хотел бы.Кроме того, отсутствует механизм наследования пространства имен, только механизм имен , ссылка .

1: хотя вы можете добавлять переменные (свойства) экземпляра после создания объекта, просто ссылаясь на негоих, это считается плохой практикой.Свойства также могут содержать анонимные функции, но злоупотребление свойствами для эмуляции методов добавления также является плохой практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...