2017-04-04 67 views
2

好日子的傢伙!PHP - 使用關鍵字以外的類和使用關鍵字裏面的類

只想問的使用區別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 
    } 
+2

在課堂內使用是使用特質。在外面使用是導入命名空間。 – Augwa

+0

@Augwa你是什麼意思?你能提供一個更好的解釋嗎? –

+0

http://php.net/manual/zh/language.oop5.traits.php – Augwa

回答

1

當你定義一個類,它只能有它的命名空間中訪問其他類。實例中的控制器在以下命名空間中定義。

namespace App\Http\Controllers\Auth; 

所以要使用其他類,您需要從它們自己的名稱空間導入它們,以便您可以訪問它們。例如:

use Illuminate\Foundation\Auth\ThrottlesLogins; 

如果你有javascript ES6的經驗,它有點類似於import。導入包時,默認名稱空間爲/node_modules。導入自己的文件,你需要通過給文件的位置像

import '../containers/index.js' 

返回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 
    } 
} 

從上面的例子中,必須直接訪問incrementLoginAttempts(),其被定義的ThrottlesLogins

+0

很好的例子:) –