Недавно я столкнулся с классом, который использует инструкцию 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 JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
}
и я видел некоторые примеры этой модели, на самом деле использующие методы, включенные в класс UserTrait
- следовательно, мое подозрение, но хотелось бы узнать больше о значениях прилагаемых use
операторов.
Документация PHP говорит:
Ключевое слово use должно быть объявлено в самой внешней области файла ( глобальная область) или внутри декларации пространства имен. Это связано с тем, что импорт выполняется во время компиляции, а не во время выполнения, поэтому он не может быть блочный. В следующем примере показано незаконное использование используйте ключевое слово
а затем пример:
namespace Languages;
class Greenlandic
{
use Languages\Danish;
...
}
который указывает, что это неправильное использование ключевого слова use
- любые подсказки?