php类声明与实例化的区别?
習慣沉默
習慣沉默 2017-05-16 13:10:23
0
2
443

我是一个菜鸟新手,我发现很多工具类,直接声明就能用了,例如laravel里的

Request $request;
$request->get();

这让我很不解,声明一个类变量难道就实例化了码?
百度了一下,关于这个问题php语言居然没有一个人问,只有java,java是这样的:
Class1 item1;声明一个对象
生成一个引用类型,占4字节内存,不管是什么类型(object o或From f)的引用都是占用4字节内存
Class1 item1 = new Class1();
创建一个类实例,开辟一块内存(这块内存跟类本身的大小有关),并且让引用item1指向这块内存的起始位置;

如果是这样,$request只是一个Request的引用,而Request还没实例化,在内存中是不存在的,那为什么$request能直接用里面的方法呢?看了一下源代码,虽然这个类里面的属性和方法有static静态的,在实例化之前就已经存在内存中了,但也有很多非静态的属性和方法啊,get()就是一个非静态方法!

直接调用不会引起指针异常吗?
新手求问!

習慣沉默
習慣沉默

全員に返信(2)
Ty80

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

リーリー

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

いいねを押す +0
过去多啦不再A梦

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

リーリー

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

を使用しました

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

リーリー

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!