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, и будет совсем хорошо.