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

我是一个菜鸟新手,我发现很多工具类,直接声明就能用了,例如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...

过去多啦不再A梦

다음은 틀린 내용입니다. 소스코드를 잘 살펴보니 답이 이렇죠?

으아아아

이 두 코드 이전에는 use IlluminateHttpRequest;

을 사용했습니다.

use는 네임스페이스만 사용하는데, 클래스를 호출하려면 클래스 파일을 로드(require)하거나 자동으로 로드해야 합니다. lavavel은 자동 로딩을 사용하므로 IlluminateHttpRequest를 사용하는 것은 Request 클래스를 직접 사용하는 것과 같습니다. 실제로 Laravel은 Request 클래스를 사용할 때 많은 작업을 수행하지 않습니다.
Laravel의 자동 로딩 기능은 다음과 같습니다.

으아아아

인스턴스화되지 않은 클래스를 사용하면 자동으로 로드되어 인스턴스화되는 것을 볼 수 있습니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!