Rumah >pembangunan bahagian belakang >masalah PHP >Mengapa kelas dan kaedah tidak boleh dipanggil secara statik secara luaran dalam php?

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

PHPz
PHPzasal
2023-03-24 17:09:591302semak imbas

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();

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

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();

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

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!

Kenyataan:
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