Mengapa kelas dan kaedah tidak boleh dipanggil secara statik secara luaran dalam php?

PHPz
Lepaskan: 2023-03-24 17:52:01
asal
1271 orang telah melayarinya

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas, dicirikan oleh sintaksnya yang ringkas dan mudah digunakan, kelajuan pembangunan pantas dan sokongan untuk berbilang pangkalan data. Walau bagaimanapun, sesetengah pembangun PHP mungkin menghadapi masalah: kelas dan kaedah tidak boleh dipanggil secara statik secara luaran. Artikel ini akan meneroka masalah ini dan memberikan penyelesaian.

Apakah panggilan statik?

Dalam pembangunan PHP, panggilan statik ialah cara untuk memanggil kelas atau kaedah secara langsung tanpa membuat instantiat objek. Kod sampel adalah seperti berikut:

class Car{
   public static function run(){
      echo "the car is running";
   }
}

// 静态调用
Car::run();
Salin selepas log masuk

Seperti yang dinyatakan di atas, panggilan statik ialah satu cara untuk mengakses ahli kelas (kaedah atau harta) dengan menggunakan nama kelas dan pengendali bertitik dua.

Mengapa ia tidak boleh dipanggil secara statik secara luaran?

Dalam PHP, sebab utama mengapa ia tidak boleh dipanggil secara luaran secara statik ialah sekatan pengubah suai akses. Jika kelas atau kaedah ditakrifkan menggunakan pengubah suai private atau protected, ahlinya hanya boleh diakses dalam kelas. Oleh itu, apabila dipanggil secara luaran, penterjemah PHP akan menafikan permintaan akses yang sepadan.

Penyelesaian:

Jika anda ingin memanggil kelas atau kaedah secara statik secara luaran, anda perlu mentakrifkannya sebagai awam (menggunakan pengubah suai public). Sebagai contoh, katakan kita mempunyai kelas yang dipanggil MyClass dengan kaedah statik awam myMethod yang boleh ditakrifkan seperti berikut:

class MyClass{
   public static function myMethod(){
      echo "Hello World!";
   }
}
Salin selepas log masuk

Selepas mentakrifkan kaedah dalam kelas, ia boleh dihantar ke mana-mana dalam kelas Panggilnya secara langsung tanpa membuat seketika kelas. Sebagai contoh, kaedah boleh dipanggil seperti berikut dalam fail PHP lain:

MyClass::myMethod();
Salin selepas log masuk

Selain itu, API pantulan boleh digunakan untuk akses statik. API Refleksi ialah alat berkuasa yang boleh digunakan untuk mendapatkan maklumat tentang kelas dan objek semasa PHP sedang berjalan. Kod berikut menunjukkan cara menggunakan API pantulan untuk membuat instantiat kelas secara statik dan memanggil kaedahnya.

class Example{
   public function run(){
       echo "example code";
   }
}

// 使用反射API静态地调用run()函数
$class = new ReflectionClass('Example');
$method = $class->getMethod('run');
$method->invoke(null);
Salin selepas log masuk

Dalam contoh kod di atas, rujukan kepada kaedah run() diperoleh dengan menggunakan kelas ReflectionClass dan kaedah getMethod(). Kemudian, gunakan kaedah invoke() untuk memanggil kaedah tersebut. Ambil perhatian bahawa kerana tidak ada keperluan untuk membuat contoh kelas Contoh di sini, nilai nol dihantar dalam invoke().

Kesimpulan

Dalam pembangunan PHP, panggilan statik luaran ke kelas atau kaedah mungkin dihadkan oleh pengubah suai akses. Untuk menyelesaikan masalah ini, anda perlu mentakrifkan kelas atau kaedah sebagai awam dan menggunakan nama kelas dan pengendali bertitik dua untuk mengakses ahli kelas. Selain itu, API pantulan juga boleh digunakan untuk akses statik. Mengetahui maklumat ini boleh membantu pembangun menggunakan kuasa PHP dengan lebih baik.

Atas ialah kandungan terperinci Mengapa kelas dan kaedah tidak boleh dipanggil secara statik secara luaran dalam php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
php
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan