Подтвердить что ты не робот

PHP: "использовать" внутри определения класса

Недавно я столкнулся с классом, который использует инструкцию 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 - любые подсказки?

4b9b3361

Ответ 1

они называются признаками, которые используются с использованием инструкции "use", которая включена в php 5 oop, и они являются единичным наследованием для более подробной проверки после

http://php.net/manual/en/language.oop5.traits.php