2017-06-22 3 views
0

"use"キーワードを使ってクラスにアクセスするか、 "new"とクラスのファイルパスを追加することの違いは何ですか?私はUserクラスの機能を使用するつもりならば、PHPのキーワードと新しいキーワードを使用

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

//if accessed using use keyword 
use App\Entity\User; 

class SampleController extends Controller 
{ 
    public function add(Request $request) 
    { 
     //if declared by "use" keyword above 
     $user = new User(); 

     //if not declared by "use" keyword 

     $user = new \App\Entity\User(); 
    } 
} 

結果は同じですが、その宣言の違いは何ですか?

+1

試用版を削除してください。すぐにエラーが表示されます。 'use'キーワードは、requireステートメントと似ていますが、クラスを呼び出すが、呼び出されるまでクラスを初期化しませんが、' use'は必要ありません。 'new App \ Entity \ User \ User'を使用していますが、ユーザークラスが必要になるたびにこれを行うことを想像してください。それは 'use'が' new'と 'new'のための簡略化をクラスに入れたところです。 – ThisGuyHasTwoThumbs

+1

' use'は単に名前空間のクラス定義のエイリアスを設定しています。 'new'はクラスのインスタンスをインスタンス化します。非常に異なる(基本的な)もの –

+0

' use'は基本的に2つの異なる名前空間で宣言されている限り、同じ名前の2つのクラスを定義できます。場合によっては、クラス名の前にネームスペースを指定して、どちらのネームスペースを使用するかを教えてくれるようにする必要があります。 – Kaddath

答えて

2

useキーワードは、クラスまたは名前空間のエイリアスを作成するより詳細な情報を見つけることができますnew User();

と同じである現在のスコープに

new \App\Entity\User();を指定された名前空間(またはクラス)をインポートします。

asキーワードには、エイリアスが導入されています。 asがなければ、エイリアスは、名前空間やクラスパスの最後の構成要素である:

use App\Entity\User as OneUser; 

OneUser\App\Entity\Userと同じものであり、現在のファイルにどこでも代わりにそれを使用することができます。

use App\Entity\User; 

ここでエイリアスがUserApp\Entity\Userの最後のコンポーネント)です。

use App\Entity\User as User; 

エイリアスは、以下のように書き込むために使用されます。コードはこのように読みやすくなります。

エイリアスはコンパイル時に処理され、作成されたファイルでのみ表示されます。 useステートメントの単なる存在は何の効果もありません。クラスまたは名前空間の名前を短くするだけですが、この短い名前はそれを含むファイルのコンパイル中にのみ有効です。

エイリアス化されたクラス名は、文字列内で展開されません。コンパイル時にはテキストだけです。実行時に'User''App\Entity\User'と同じではありません。

したがって、class_exists('User')戻りFALSEしかしclass_exists('App\Entity\User')戻りTRUE。 PHPは"Using namespaces: Basics"ドキュメントページを読んで、エイリアスを解決する方法の詳細については洞察


+0

ありがとう@axiac。今、それは私には明らかです。 –

関連する問題