Rumah > pembangunan bahagian belakang > masalah PHP > Bolehkah kaedah statik dalam php mengakses kaedah bukan statik?

Bolehkah kaedah statik dalam php mengakses kaedah bukan statik?

WBOY
Lepaskan: 2023-03-15 16:36:01
asal
2187 orang telah melayarinya

Kaedah statik dalam PHP boleh mengakses kaedah bukan statik Dengan membuat seketika objek, anda boleh memanggil kaedah bukan statik dalam objek walaupun kaedah statik boleh memanggil kaedah bukan statik, mereka tidak boleh memanggil pembina.

Bolehkah kaedah statik dalam php mengakses kaedah bukan statik?

Persekitaran pengendalian artikel ini: sistem Windows 10, PHP versi 7.1, komputer Dell G3.

Bolehkah kaedah statik dalam php mengakses kaedah bukan statik

Apakah yang berlaku jika kita memanggil kaedah bukan statik? Buat ujian dulu.

<?php
class test{
    function test() {
        echo &#39;it works&#39;;
    }
}
test::test();
?>
Salin selepas log masuk

Laksanakan yang berikut, dan ralat yang dikembalikan adalah seperti berikut:

Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php
on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0
Salin selepas log masuk

Pada masa ini, anda mungkin berfikir bahawa memanggil kaedah bukan statik secara statik tidak boleh dilaksanakan, tetapi dalam hakikatnya, kesimpulannya adalah Ia terlalu awal, kerana kaedah test() adalah istimewa Ia mempunyai nama yang sama dengan kelas dan merupakan kaedah pembina. Kami meneruskan ujian.

<?php
class test {
    function test() {
        echo &#39;it works&#39;;
    }
    function test2() {
        echo &#39;it works too&#39;;
    }
}
test::test2();
?>
Salin selepas log masuk

Hasil pelaksanaan:

it works too
Salin selepas log masuk

Ini menunjukkan bahawa panggilan statik kaedah bukan statik boleh dilaksanakan, tetapi panggilan statik pembina tidak boleh dilakukan. Untuk mengesahkan kesimpulan ini, saya melakukan ujian berikut:

<?php
class test{
    static function test() {
        echo &#39;it works&#39;;
    }
}
test::test();
?>
Salin selepas log masuk

Hasil pelaksanaan adalah seperti berikut:

Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
Salin selepas log masuk

Pembina tidak boleh diisytiharkan statik, jadi inferens di atas adalah betul.

Tetapi keputusan ini sememangnya sangat istimewa, kerana mungkin hanya PHP boleh memanggil kaedah bukan statik secara statik Jika kaedah bukan statik dipanggil secara statik ralat berikut akan dilaporkan:

Cannot make a static reference to the non-static method showString() from the type HelloWorldApp
Salin selepas log masuk

Saya belum mencuba bahasa lain satu demi satu, tetapi ini sudah cukup untuk menggambarkan ciri khas PHP. Saya tidak menemui sebarang penjelasan yang berkaitan mengapa PHP mempunyai keadaan sedemikian.

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bolehkah kaedah statik dalam php mengakses kaedah bukan statik?. 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