PHP :类定义中的“使用”

2022-08-30 08:36:54

最近,我遇到了一个在类定义中使用语句的类。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');

}

我已经看到这个模型的一些例子实际上使用类中包含的方法 - 因此我怀疑,但真的很想了解更多关于所附语句的含义。UserTraituse

PHP文档说:

use 关键字必须在文件的最外层作用域(全局作用域)或命名空间声明内部声明中声明。这是因为导入是在编译时而不是运行时完成的,因此它不能被阻止范围。以下示例将显示非法使用 use 关键字的行为:

后面跟着示例:

namespace Languages;

class Greenlandic
{
    use Languages\Danish;

    ...
}

这将表明这是对关键字的错误使用 - 任何线索?use


答案 1

它们被称为特征,从 PHP 5.4 开始可用。它们使用use关键字导入到另一个类或命名空间中,该关键字自PHP 5.0以来一直包含在内,就像将常规类导入另一个类一样。它们是单一继承。实现性状的主要原因是因为单一继承的限制。

有关更多详细信息,请参阅 PHP 特质手册


答案 2

推荐