我是一个菜鸟新手,我发现很多工具类,直接声明就能用了,例如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()就是一个非静态方法!
直接调用不会引起指针异常吗?
新手求问!
PHP에는 이런 종류의 구문이 없습니다.
으아악표시되는 내용은 다음과 같아야 합니다.
Route::get('/', function (IlluminateHttpRequest $request) {
});
이것은 의존성 주입입니다
http://www.golaravel.com/lara...
다음은 틀린 내용입니다. 소스코드를 잘 살펴보니 답이 이렇죠?
으아아아에
이 두 코드 이전에는
을 사용했습니다.use IlluminateHttpRequest;
use는 네임스페이스만 사용하는데, 클래스를 호출하려면 클래스 파일을 로드(require)하거나 자동으로 로드해야 합니다. lavavel은 자동 로딩을 사용하므로 IlluminateHttpRequest를 사용하는 것은 Request 클래스를 직접 사용하는 것과 같습니다. 실제로 Laravel은 Request 클래스를 사용할 때 많은 작업을 수행하지 않습니다.
으아아아Laravel의 자동 로딩 기능은 다음과 같습니다.
인스턴스화되지 않은 클래스를 사용하면 자동으로 로드되어 인스턴스화되는 것을 볼 수 있습니다.