2017-11-30 7 views
1

私はphp(laravel)の "use"キーワードの使用に関する2つのクエリを持っています。以下はlaravelのさまざまな文脈で "use"キーワードを使用する背後にあるコンセプトは何ですか?

はlaravelドキュメントからのコードの抜粋です:行1で

use App\Flight; 

$flights = App\Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

コードは、私たちはフライトモデルとライン2は、すべてのレコードをフェッチ文を持って使用することができます。だから、2行目でApp\Flight::all();の代わりにFlight::all();と言うことはできません。どちらも正しいのですか?相対パスと絶対パスの両方に関係していますか? (softDeletesに関連する)

2番目のクエリ:以下 は私のモデルの一つからのコードブロックです:

、次のステートメントが使用されている6行目のここ
namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 

class Post extends Model 
{ 
    use SoftDeletes; 
    protected $dates = ['deleted_at']; 
    protected $fillable = ['title','body']; 
} 

use SoftDeletes; 

なぜsoftDeletesというキーワードを使用しています。これはモデルで使用していないため、単純に実行できます:

class Post extends Model 
次のコードの文なし

:モデルの場合

use Model; 

+0

最初はモデルで、2番目は特性です –

+0

https://stackoverflow.com/questions/29001191/laravel-5-use-statementsこのリンクは、ファイルの先頭にあるuse文をよりよく理解して使用するのに役立ちますクラスファイルの中の文は、それが特徴ですhttp://php.net/manual/en/language.oop5.traits.php – Sohel0415

答えて

2

1 - useApp\Flightクラスとして使用されます。次のステートメントはどちらも正しいFlight::all()\App\Flight::all()です(\の前には重要ですが、\を前面に置いておくと、現在の名前空間からのネームスペースを探す)。

2-useTraitsManualの文脈で使用される。 SoftDeletesは形質です& Modelはクラスです。

3

PHPのuseコマンドは、名前空間をインポート/エイリアスするために使用されます(docs)。

まず、このコマンドでは、クラス、インターフェイス、名前空間の3種類のインポート/エイリアシングがサポートされていることがわかります。

あなたの最初の例では、クラスのインポートです:

use App\Flight; 

$flights = Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

それは基本的に名前空間Appの中に発見クラスFlightをインポートし、私たちは、クラスは次のように開始することを前提としています

namespace App; 

... 

class Flight extends Model {...} 

として別の方法として、名前空間をインポートして、それが属する名前空間を持つクラスを参照することができます:

use App; 

$flights = App\Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

それとも、まったく何もインポートしないようして使用することができます絶対参照:あなたの2番目の例では

$flights = \App\Flight::all(); 

foreach ($flights as $flight) { 
    echo $flight->name; 
} 

SoftDeletesはクラスに似ているtrait、ですが、唯一の(一貫性のある方法でグループ機能に意図この場合、ソフト削除を実行するために必要なすべてのメソッド)。あなたが以前のように、それは同じロジックを次の見ることができるように

namespace Illuminate\Database\Eloquent; 

trait SoftDeletes{...} 

:名前空間Illuminate\Database\Eloquentに見て、私はそれを参照することができ、クラス/トレイトSoftDeletesを使用

特色は次のようになります。

希望すると、これが役立ちます。

関連する問題