Итак, в новой версии 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. Это слово можно по-разному перевести на русский язык. Но, скорее всего, войдет в наш язык как «трейт». Посмотрим…