Jadual Kandungan
回复讨论(解决方案)
Rumah pembangunan bahagian belakang tutorial php php子类重载父类私有方法的疑问

php子类重载父类私有方法的疑问

Jun 20, 2016 pm 12:29 PM

<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		public function test($a){			echo "testB".$a;		}	}		$var1=new B;	$var1->test(10);?>
Salin selepas log masuk

上述代码中:
子类B虽然继承了A,但是A中的test()是私有方法,原则上应该是不会被继承的,为什么在B中定义一个同名但是参数不同的test()会报错呢,这也算是重载的错误吗?


回复讨论(解决方案)

<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		private function test($a){			echo "testB".$a;		}		public function test1($a){			$this->test($a);		}	}		$var1=new B;	$var1->test1(10);?>
Salin selepas log masuk
Salin selepas log masuk

而将B中的public该为private就不会报错

你看看错误信息不就知道怎么回事了吗?

你看看错误信息不就知道怎么回事了吗?


我知道错误的原因是重写,但是有两个疑问:
1.父类的private方法不是不会被继承吗,为什么会导致重写?
2.为什么子类中public和protected会报错,而private不会报错?
class B extends A{        public function test($a){            echo "testB".$a;        }}
Salin selepas log masuk

能麻烦解释一下吗?

不是重写,是覆盖
覆盖的条件是保护方式和参数一致
这种从 java 硬拽过来的玩意,违背了 php 的初衷,并最终导致 php 的死亡

连 C# 都在推出“动态语言”了,php 还逐步静态化,这不是倒退吗?

不是重写,是覆盖
覆盖的条件是保护方式和参数一致
这种从 java 硬拽过来的玩意,违背了 php 的初衷,并最终导致 php 的死亡

连 C# 都在推出“动态语言”了,php 还逐步静态化,这不是倒退吗?


重写和覆盖不是一个意思吗?
可能我没表达清楚,我的意思是父类中的private test()方法不是不可以继承吗,那么在子类中理论上我可以起一个名为test()的函数,并且参数列表也是任意的,可是这段代码会报错。 所以是不是不能继承的方法也存在重写?
<?php    class A{        private function test(){            echo "testA";        }    }     class B extends A{        public function test($a){            echo "testB".$a;        }    }         $var1=new B;    $var1->test(10);?>
Salin selepas log masuk

而下面这段代码在子类中,如果是重写,那么为什么参数列表不一致正确呢?
<?php	class A{		private function test(){			echo "testA";		}	}	class B extends A{		private function test($a){			echo "testB".$a;		}		public function test1($a){			$this->test($a);		}	}		$var1=new B;	$var1->test1(10);?>
Salin selepas log masuk
Salin selepas log masuk

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的


就是说B::test()跟父类没有半毛钱关系对吧,谢谢了。

对的,对的,对的

B::test 是重新定义,或是说是重写(覆盖)
重载,在 php 中是不支持的

至于说那些所谓的语法检查,那都是胡扯的,硬拽进来拖慢 php 速度用的


或者说此处不存在重写,只是在B类中定义了一个新的函数test()而已。

但形式上是重写了

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Jelaskan JSON Web Tokens (JWT) dan kes penggunaannya dalam PHP API. Apr 05, 2025 am 12:04 AM

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Bagaimanakah sesi merampas kerja dan bagaimana anda dapat mengurangkannya dalam PHP? Apr 06, 2025 am 12:02 AM

Sesi rampasan boleh dicapai melalui langkah -langkah berikut: 1. Dapatkan ID Sesi, 2. Gunakan ID Sesi, 3. Simpan sesi aktif. Kaedah untuk mengelakkan rampasan sesi dalam PHP termasuk: 1. Gunakan fungsi Sesi_Regenerate_ID () untuk menjana semula ID Sesi, 2. Data sesi stor melalui pangkalan data, 3.

Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Huraikan prinsip -prinsip yang kukuh dan bagaimana ia memohon kepada pembangunan PHP. Apr 03, 2025 am 12:04 AM

Penerapan prinsip pepejal dalam pembangunan PHP termasuk: 1. Prinsip Tanggungjawab Tunggal (SRP): Setiap kelas bertanggungjawab untuk hanya satu fungsi. 2. Prinsip Terbuka dan Tutup (OCP): Perubahan dicapai melalui lanjutan dan bukannya pengubahsuaian. 3. Prinsip Penggantian Lisch (LSP): Subkelas boleh menggantikan kelas asas tanpa menjejaskan ketepatan program. 4. Prinsip Pengasingan Antara Muka (ISP): Gunakan antara muka halus untuk mengelakkan kebergantungan dan kaedah yang tidak digunakan. 5. Prinsip Inversi Ketergantungan (DIP): Modul peringkat tinggi dan rendah bergantung kepada abstraksi dan dilaksanakan melalui suntikan ketergantungan.

Bagaimana cara debug mod CLI dalam phpstorm? Bagaimana cara debug mod CLI dalam phpstorm? Apr 01, 2025 pm 02:57 PM

Bagaimana cara debug mod CLI dalam phpstorm? Semasa membangun dengan PHPStorm, kadang -kadang kita perlu debug PHP dalam mod Interface Line Command (CLI) ...

Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Bagaimana cara menetapkan kebenaran secara automatik UnixSocket selepas sistem dimulakan semula? Mar 31, 2025 pm 11:54 PM

Bagaimana untuk menetapkan keizinan UnixSocket secara automatik selepas sistem dimulakan semula. Setiap kali sistem dimulakan semula, kita perlu melaksanakan perintah berikut untuk mengubahsuai keizinan UnixSocket: sudo ...

Terangkan pengikatan statik lewat dalam php (statik: :). Terangkan pengikatan statik lewat dalam php (statik: :). Apr 03, 2025 am 12:04 AM

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Bagaimana cara menghantar permintaan pos yang mengandungi data JSON menggunakan perpustakaan php curl? Apr 01, 2025 pm 03:12 PM

Menghantar data JSON menggunakan perpustakaan Curl PHP dalam pembangunan PHP, sering kali perlu berinteraksi dengan API luaran. Salah satu cara biasa ialah menggunakan perpustakaan curl untuk menghantar post ...

See all articles