cari

Rumah  >  Soal Jawab  >  teks badan

Apakah perbezaan antara pengisytiharan kelas PHP dan instantiasi?

Saya seorang pemula, dan saya mendapati bahawa banyak kelas alat boleh digunakan dengan mengisytiharkannya secara langsung, seperti yang terdapat dalam laravel

Minta $request;
$request->dapatkan();

Ini membingungkan saya Adakah dengan mengisytiharkan pembolehubah kelas menunjukkan kod tersebut?
Selepas mencari di Baidu, tiada siapa yang bertanya tentang isu ini dalam bahasa PHP, hanya Java dan Java adalah seperti ini:
Item1 Kelas1;Isytiharkan objek
Janakan jenis rujukan , Menduduki 4 bait memori, tidak kira apa jenis (objek o atau Dari f) rujukan, ia menduduki 4 bait memori
Kelas1 item1 = baharu Class1();
Buat contoh kelas, peruntukkan memori (ingatan ini berkaitan dengan saiz kelas itu sendiri), dan biarkan item rujukan1 menunjuk ke kedudukan permulaan memori ini

Jika ya, $request hanyalah rujukan kepada Request dan Request masih belum digunakan dan tidak wujud dalam ingatan. , maka mengapakah $request boleh terus menggunakan kaedah di dalamnya? Selepas melihat kod sumber, walaupun sifat dan kaedah dalam kelas ini adalah statik statik dan sudah wujud dalam ingatan sebelum instantiasi, terdapat juga banyak sifat dan kaedah bukan statik, get( ) ialah kaedah bukan statik!

Tidakkah memanggilnya secara langsung menyebabkan pengecualian penuding?
Tanya orang baru!

習慣沉默習慣沉默2781 hari yang lalu497

membalas semua(2)saya akan balas

  • PHP中文网

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

    PHP tidak mempunyai sintaks seperti ini
    Apa yang anda lihat sepatutnya seperti ini
    Route::get('/', function (IlluminateHttpRequest $request) {

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

    });
    Ini adalah suntikan pergantungan
    http://www.golaravel.com/lara...

    balas
    0
  • 过去多啦不再A梦

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

    Perkara berikut adalah salah: Selepas melihat dengan teliti kod sumber, adakah jawapannya seperti ini?
    di

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

    Sebelum dua keping kod ini, saya menggunakan use IlluminateHttpRequest;

    gunakan hanya menggunakan ruang nama, tetapi jika anda ingin memanggil kelas, anda mesti memuatkan fail kelas (memerlukan), atau memuatkannya secara automatik. , lavavel menggunakan pemuatan automatik, jadi pada pendapat kami, menggunakan IlluminateHttpRequest adalah sama dengan dapat menggunakan kelas Permintaan secara langsung, sebenarnya, ia tidak melakukan banyak kerja apabila menggunakan kelas Permintaan!
    Fungsi pemuatan automatik Laravel adalah seperti berikut:

     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;
        }
    }
    

    Ia boleh dilihat bahawa jika anda menggunakan kelas yang tidak segera, ia akan dimuatkan secara automatik dan dibuat seketika.

    balas
    0
  • Batalbalas