検索

ホームページ  >  に質問  >  本文

PHPのクラス宣言とインスタンス化の違いは何ですか?

私は初心者です。laravel など、多くのツール クラスは直接宣言することで使用できることがわかりました。

リクエスト $request;
$request->get();

これには疑問を感じますが、クラス変数を宣言するとコードがインスタンス化されるのでしょうか?
Baidu で検索したところ、PHP 言語でこの問題について質問した人は誰もおらず、Java だけでした。Java は次のようなものです:
Class1 item1;オブジェクトを宣言
参照型を生成、参照のタイプ (オブジェクト o または From f) に関係なく、4 バイトのメモリを占有します。
Class1 item1 = new Class1();
Createクラス インスタンスで、メモリの一部を開き (このメモリはクラス自体のサイズに関連します)、参照 item1 がこのメモリの開始位置を指すようにします。

その場合、$requestRequest への単なる参照であり、Request はまだインスタンス化されておらず、メモリ内に存在しません。では、なぜ $request はそのメソッドを直接使用できるのでしょうか?ソース コードを確認すると、このクラスのプロパティとメソッドは static 静的であり、インスタンス化前にメモリ内にすでに存在していますが、非静的プロパティとメソッドも多数あります。非静的メソッド!

これを直接呼び出すとポインタ例外が発生しないでしょうか?
初心者に質問します!

習慣沉默習慣沉默2828日前515

全員に返信(2)返信します

  • PHP中文网

    PHP中文网2017-05-16 13:12:23

    PHP にはこのような構文はありません
    表示される内容は次のようになります
    Route::get('/', function (IlluminateHttpRequest $request) {

    リーリー

    });
    これは依存性注入です
    http://www.golaravel.com/lara...

    返事
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-16 13:12:23

    以下は間違いです: ソースコードをよく見てみると、答えはこんな感じでしょうか?

    リーリー

    これら 2 つのコードの前に、私は use IlluminateHttpRequest;

    を使用しました

    use は名前空間を使用するだけですが、クラスを呼び出したい場合は、クラス ファイルをロードする (必須) か、自動的にロードする必要があります。 , lavavel は自動読み込みを使用するため、IlluminateHttpRequest を使用することは、Request クラスを直接使用できることと同等であると考えています。実際、Laravel は Request クラスを使用するときに多くの作業を行います。
    Laravelの自動読み込み機能は以下の通りです

    リーリー

    インスタンス化されていないクラスを使用すると、自動的にロードされてインスタンス化されることがわかります。

    返事
    0
  • キャンセル返事