Недавно я наткнулся на класс, который использует use
утверждение внутри определения класса.
Может ли кто-нибудь объяснить, что именно он делает, поскольку я не могу найти никакой информации об этом.
Я понимаю, что это может быть способом удаления его из глобальной области видимости данного файла, но, возможно, он также позволяет данному классу наследовать от нескольких родительских классов — так как extends
допускает только одну ссылку на родительский класс?
Пример, который я видел, был в пользовательской модели оригинальной установки Laravel:
<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
}
и я видел несколько примеров этой модели на самом деле с использованием методов, включенных в UserTrait
класс — отсюда мое подозрение, но очень хотелось бы узнать больше о значении вложенного use
заявления.
PHP документация говорит:
Ключевое слово use должно быть объявлено во внешней области файла (
глобальная область) или внутри объявлений пространства имен. Это потому что
импорт выполняется во время компиляции, а не во время выполнения, поэтому он не может быть
блок ограничен В следующем примере будет показано незаконное использование
используйте ключевое слово:
следуя примеру:
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
что указало бы, что это неправильное использование use
ключевое слово — какие-либо подсказки?
Они называются Черты и доступны с PHP 5.4. Они импортируются в другой класс или пространство имен, используя использование ключевое слово, которое включено с PHP 5.0 как импорт обычного класса в другой класс. Они — единственное наследство. Основной причиной реализации признаков является ограничение единого наследования.
Для более подробной информации смотрите Руководство по чертам PHP:
Других решений пока нет …