Pull to refresh

PHP — «горизонтальное наследование»

Level of difficultyMedium
Reading time2 min
Views1.7K
Итак, в новой версии PHP появилась интересный концепт — «horizontal inheritance» (горизонтальное наследование), который был добавлен в язык с помощью конструкции «namespace». Это позволяет объединять функциональность из нескольких классов без наследования их от одного класса-родителя. Вместо этого, теперь можно объединять методы и свойства из разных классов в одном классе через использование пространства имен.


Похожие концепции существуют и в других языках. Например, в языке программирования 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. Это слово можно по-разному перевести на русский язык. Но, скорее всего, войдет в наш язык как «трейт». Посмотрим…
Tags:
Hubs:
Total votes 39: ↑34 and ↓5+29
Comments62

Articles