Traits в PHP 5.4

Помните я рассказывал о новых возможностях в следующей версии PHP, тогда я еще говорил, что мне очень не хватает Traits (буду называть их примеси). Оказывается уже несколько месяцев как их добавили в транк, поэтому с нетерпением жду релиза.

Документации на официальном сайте пока еще нет, но кое-что уже сейчас можно увидеть в RFC (правда из-за security notice оно сейчас закрыто) и из рассылки internals.php.

Например так будет выглядеть инициализация примеси и ее использование:

trait Singleton {
 public static function getInstance() { ... }
}

class A {
 use Singleton;
 // ...
}

class B extends ArrayObject {
 use Singleton;
 // ...
}

// метод getInstance доступен в обоих классах
A::getInstance();
B::getInstance();

В редких случаях могут возникать конфликты. Например, вы хотите использовать две примеси, у которых есть методы с одинаковыми именами. Разумеется на этом PHP вас обругает, поэтому на такой случай есть 2 специальные конструкции.

1. Приоритет

// Примеси A и B имеют метод hello
class Test {
 use A, B {
 B::hello insteadof A;
 }
}

// В классе Test будет метод hello из примеси B

2. Алиас

class Test {
 use A, B {
 B::hello insteadof A;
 A::hello as helloA;
 }
}

// В классе Test будут методы hello и helloA

Не буду рассказывать насколько примеси помогают повторному использованию кода, думаю, вы и сами должны это понимать. В общем, это одна из моих самых ожидаемых фич в следующем релизе.

Теперь осталось добавить Unicode на уровне ядра в PHP, и будет совсем хорошо.

Что ещё почитать?

← Операторы в JavaScript (презентацияJavaScript Garden →