Модификаторы доступа и трейты

Следует обратить ваше внимание на то, что использование трейтов - это не наследование. При наследовании наследования приватные методы и свойства не наследуются.

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

Посмотрим на примере:

<?php trait TestTrait { // Приватный метод: private function method() { return '!!!'; } } class Test { use TestTrait; // подключаем трейт public function __construct() { // Используем приватный метод трейта: echo $this->method(); // выведет '!!!' } } new Test; ?>

Изменения прав доступа к методам трейта

Внутри трейта можно использовать любой модификатор доступа для методов (то есть public, private или protected). При необходимости, однако, в самом классе можно этот модификатор поменять на другой. Для этого в теле use после ключевого слова as нужно указать новый модификатор.

Посмотрим на примере:

<?php trait TestTrait { // Приватный метод: private function method() { return '!!!'; } } class Test { use TestTrait { TestTrait::method as public; //!! меняем метод на публичный } } $test = new Test; echo $test->method(); // выведет '!!!' ?>