PHP-类外的use关键字和类内的use关键字的区别

Mr.*_*. J 4 php laravel

大家好!

只想问的差异使用 outise的class使用里面的class?我也用谷歌搜索,但是我的问题与答案不符。

范例

namespace App\Http\Controllers\Auth;

use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Auth;
use Illuminate\Http\Request;

class AuthController extends Controller
{

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectTo = '/';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
       // Some Code
    }
Run Code Online (Sandbox Code Playgroud)

Edd*_*ove 5

当定义一个类时,它只能访问其名称空间内的其他类。例如,您的控制器在以下名称空间中定义。

namespace App\Http\Controllers\Auth;
Run Code Online (Sandbox Code Playgroud)

因此,要使用其他类,需要从它们自己的名称空间中导入它们,以便可以访问它们。例如:

use Illuminate\Foundation\Auth\ThrottlesLogins;
Run Code Online (Sandbox Code Playgroud)

如果您有JavaScript ES6的经验,那就有点类似于 import。导入软件包时,默认名称空间为/node_modules。要导入自己的文件,您需要通过给文件位置类似的名称对它们进行命名空间排序

import '../containers/index.js'
Run Code Online (Sandbox Code Playgroud)

回到Laravel。现在,您已经导入了ThrottlesLogins实际上是一个特征的,现在在类内部将use其公开其中的所有方法。

use Illuminate\Foundation\Auth\ThrottlesLogins; //import
public class AuthController
{
    use ThrottlesLogins; //exposes all the methods inside
    ...

    public function login()
    {
        ...
        //login failed 
        $this->incrementLoginAttempts(); //defined in ThrottlesLogins Trait
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您可以直接访问incrementLoginAttempts(),定义为ThrottlesLogins