国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

php類別聲明與實(shí)例化的區(qū)別?
習(xí)慣沉默
習(xí)慣沉默 2017-05-16 13:10:23
0
2
567

我是一個(gè)菜鳥新手,我發(fā)現(xiàn)很多工具類,直接聲明就能用了,例如laravel裡的

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

這讓我很不解,宣告一個(gè)類別變數(shù)就實(shí)例化了碼?
百度了一下,關(guān)於這個(gè)問(wèn)題php語(yǔ)言居然沒(méi)有一個(gè)人問(wèn),只有java,java是這樣的:
Class1 item1;聲明一個(gè)對(duì)象
生成一個(gè)引用類型,佔(zhàn)4字節(jié)內(nèi)存,不管是什麼類型( object o或From f)的引用都是佔(zhàn)用4位元組記憶體
Class1 item1 = new Class1();
創(chuàng)建一個(gè)類別實(shí)例,開闢一塊記憶體(這塊記憶體跟類別本身的大小有關(guān)),並且讓引用item1指向這塊記憶體的起始位置;

如果是這樣,$request只是一個(gè)Request的引用,而Request還沒(méi)實(shí)例化,在記憶體中是不存在的,那為什麼$request能直接用裡面的方法呢?看了一下原始碼,雖然這個(gè)類別裡面的屬性和方法有static靜態(tài)的,在實(shí)例化之前就已經(jīng)存在內(nèi)存中了,但也有很多非靜態(tài)的屬性和方法啊,get()就是一個(gè)非靜態(tài)方法!

直接呼叫不會(huì)造成指標(biāo)異常嗎?
新手求問(wèn)!

習(xí)慣沉默
習(xí)慣沉默

全部回覆(2)
Ty80

php沒(méi)這種語(yǔ)法的
你看到的應(yīng)該是類似這種吧
Route::get('/', function (IlluminateHttpRequest $request) {

return view('welcome', ['a'=>$request->get('a',1)]);

});
這個(gè)是依賴注入
http://www.golaravel.com/lara...

過(guò)去多啦不再A夢(mèng)

下面是錯(cuò)的:認(rèn)真看了一下原始碼,答案是不是這樣?

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

這兩段程式碼之前,使用了use IlluminateHttpRequest;

use只是使用了命名空間,但是要想呼叫類,必須載入類別檔案(require),或是自動(dòng)載入。 ,lavavel使用的是自動(dòng)加載,所以在我們看來(lái)use IlluminateHttpRequest後就相當(dāng)於能直接用Request類,其實(shí)不是,使用Request類時(shí)laravel其實(shí)做了很多工作!
laravel的自動(dòng)載入函數(shù)如下:

 public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        spl_autoload_register(array('ComposerAutoloaderInit67db7509c61e60a4f92e012c704d3566', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
        spl_autoload_unregister(array('ComposerAutoloaderInit67db7509c61e60a4f92e012c704d3566', 'loadClassLoader'));

        $map = require __DIR__ . '/autoload_namespaces.php';
        foreach ($map as $namespace => $path) {
            $loader->set($namespace, $path);
        }

        $map = require __DIR__ . '/autoload_psr4.php';
        foreach ($map as $namespace => $path) {
            $loader->setPsr4($namespace, $path);
        }

        $classMap = require __DIR__ . '/autoload_classmap.php';
        if ($classMap) {
            $loader->addClassMap($classMap);
        }

        $loader->register(true);

        $includeFiles = require __DIR__ . '/autoload_files.php';
        foreach ($includeFiles as $fileIdentifier => $file) {
            composerRequire67db7509c61e60a4f92e012c704d3566($fileIdentifier, $file);
        }

        return $loader;
    }
}

可以看出,如果你使用了一個(gè)未實(shí)例化的類別時(shí),它會(huì)自動(dòng)載入進(jìn)來(lái)並且實(shí)例化。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板