Итак, в новой версии PHP появилась интересный концепт — «horizontal inheritance» (горизонтальное наследование), который был добавлен в язык с помощью конструкции «namespace». Это позволяет объединять функциональность из нескольких классов без наследования их от одного класса-родителя. Вместо этого, теперь можно объединять методы и свойства из разных классов в одном классе через использование пространства имен.
Похожие концепции существуют и в других языках. Например, в языке программирования Scala используется концепция миксинов (mixins), которая позволяет объединять поведение из нескольких классов. В Ruby используется термин микросмешение (mixins) для описания похожей функциональности.
Как использовать механизм горизонтального наследования, введенного в версии PHP 5.3. Дадим такой пример, можно определить два класса с методами getHello() и getWorld(), а затем использовать пространства имен для объединения этих методов в новом классе:
В этом примере два класса Hello и World определены в разных пространствах имен, и каждый из них имеет свой метод, который возвращает соответствующую строку. Затем в пространстве имен HelloWorld используется ключевое слово use, чтобы импортировать методы из классов Hello и World и объединить их в новом классе HelloWorld. Наконец, в классе HelloWorld определен метод getMessage(), который использует импортированные методы, чтобы сформировать сообщение «Hello World!».
Нельзя исключать, что развитие этого концепта продолжиться и в следующих версиях языка. Уже сейчас на англоязычных форумах PHP поговаривают о таинственном механизме traits. Это слово можно по-разному перевести на русский язык. Но, скорее всего, войдет в наш язык как «трейт». Посмотрим…
Похожие концепции существуют и в других языках. Например, в языке программирования Scala используется концепция миксинов (mixins), которая позволяет объединять поведение из нескольких классов. В Ruby используется термин микросмешение (mixins) для описания похожей функциональности.
Как использовать механизм горизонтального наследования, введенного в версии PHP 5.3. Дадим такой пример, можно определить два класса с методами getHello() и getWorld(), а затем использовать пространства имен для объединения этих методов в новом классе:
namespace HelloWorld; class Hello { public function getHello() { return "Hello "; } } namespace World; class World { public function getWorld() { return "World!"; } } namespace HelloWorld; class HelloWorld { use \Hello, \World; public function getMessage() { return $this->getHello() . $this->getWorld(); } } $helloWorld = new HelloWorld(); echo $helloWorld->getMessage(); // выводит "Hello World!"
В этом примере два класса Hello и World определены в разных пространствах имен, и каждый из них имеет свой метод, который возвращает соответствующую строку. Затем в пространстве имен HelloWorld используется ключевое слово use, чтобы импортировать методы из классов Hello и World и объединить их в новом классе HelloWorld. Наконец, в классе HelloWorld определен метод getMessage(), который использует импортированные методы, чтобы сформировать сообщение «Hello World!».
Нельзя исключать, что развитие этого концепта продолжиться и в следующих версиях языка. Уже сейчас на англоязычных форумах PHP поговаривают о таинственном механизме traits. Это слово можно по-разному перевести на русский язык. Но, скорее всего, войдет в наш язык как «трейт». Посмотрим…
