PHP: 在类定义中使用

最近我遇到一个类,它在类定义中使用 use语句。

有人能解释一下它到底是干什么的吗? 因为我找不到任何关于它的信息。

我理解这可能是一种将它从给定文件的全局作用域移开的方法,但是它是否也允许给定类从多个父类继承——因为 extends只允许一个父类引用?

我看到的例子是原始安装 Laravel 的 User 模型:

<?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关键字-任何线索?

24363 次浏览

They are called Traits and are available since PHP 5.4. They are imported into another class or namespace using use keyword which is included since PHP 5.0 like importing a regular class into another class. They are single inheritance. The primary reason for the implementation of traits is because of the limitation of single inheritance.

For more details see the PHP trait manual: