oop — 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's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');

}

и я видел несколько примеров этой модели на самом деле с использованием методов, включенных в UserTrait класс — отсюда мое подозрение, но очень хотелось бы узнать больше о значении вложенного use заявления.

PHP документация говорит:

Ключевое слово use должно быть объявлено во внешней области файла (
глобальная область) или внутри объявлений пространства имен. Это потому что
импорт выполняется во время компиляции, а не во время выполнения, поэтому он не может быть
блок ограничен В следующем примере будет показано незаконное использование
используйте ключевое слово:

следуя примеру:

namespace Languages;

class Greenlandic
{
use Languages\Danish;

...
}

что указало бы, что это неправильное использование use ключевое слово — какие-либо подсказки?

47

Решение

Они называются Черты и доступны с PHP 5.4. Они импортируются в другой класс или пространство имен, используя использование ключевое слово, которое включено с PHP 5.0 как импорт обычного класса в другой класс. Они — единственное наследство. Основной причиной реализации признаков является ограничение единого наследования.

Для более подробной информации смотрите Руководство по чертам PHP:

33

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]