PHP5中虚函数的实现方法分享_php技巧
请看下面的代码:
class A {
public function x() {
echo "A::x() was called.\n";
}
public function y() {
self::x();
echo "A::y() was called.\n";
}
public function z() {
$this->x();
echo "A::z() was called.\n";
}
}
class B extends A {
public function x() {
echo "B::x() was called.\n";
}
}
$b = new B();
$b->y();
echo "--\n";
$b->z();
?>
该例中,A::y()调用了A::x(),而B::x()覆盖了A::x(),那么当调用B::y()时,B::y()应该调用A::x()还是 B::x()呢?在C++中,如果A::x()未被定义为虚函数,那么B::y()(也就是A::y())将调用A::x(),而如果A::x()使用 virtual关键字定义成虚函数,那么B::y()将调用B::x()。然而,在PHP5中,虚函数的功能是由 self 和 $this 关键字实现的。如果父类中A::y()中使用 self::x() 的方式调用了 A::x(),那么在子类中不论A::x()是否被覆盖,A::y()调用的都是A::x();而如果父类中A::y()使用 $this->x() 的方式调用了 A::x(),那么如果在子类中A::x()被B::x()覆盖,A::y()将会调用B::x()。
上例的运行结果如下:
A::x() was called. A::y() was called. --
B::x() was called. A::z() was called.
virtual-function.php
class ParentClass {
static public function say( $str ) {
static::do_print( $str );
}
static public function do_print( $str ) {
echo "
Parent says $str
";}
}
class ChildClass extends ParentClass {
static public function do_print( $str ) {
echo "
Child says $str
";}
}
class AnotherChildClass extends ParentClass {
static public function do_print( $str ) {
echo "
AnotherChild says $str
";}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b=new AnotherChildClass();
$b->say( 'Hello' );

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Perbezaan antara php5 dan php8 adalah dari segi prestasi, struktur bahasa, sistem jenis, pengendalian ralat, pengaturcaraan tak segerak, fungsi perpustakaan standard dan keselamatan. Pengenalan terperinci: 1. Peningkatan prestasi Berbanding dengan PHP5, PHP8 mempunyai peningkatan besar dalam prestasi PHP8 memperkenalkan pengkompil JIT, yang boleh menyusun dan mengoptimumkan beberapa kod pelaksanaan frekuensi tinggi, dengan itu meningkatkan kelajuan berjalan; PHP8 memperkenalkan beberapa struktur dan fungsi bahasa baharu PHP8 menyokong parameter yang dinamakan, membenarkan pembangun menghantar nama parameter dan bukannya susunan parameter, dsb.

Cara menukar port 80 dalam php5: 1. Edit nombor port dalam fail konfigurasi pelayan Apache; mula berjalan pada port baru berjalan pada port.

Kelebihan beban fungsi dalam C++ membolehkan mentakrifkan pelaksanaan berbeza untuk fungsi dengan nama yang sama dengan parameter berbeza, manakala fungsi maya membenarkan fungsi kelas asas mengatasi dalam kelas terbitan untuk mencapai polimorfisme. Lebihan fungsi dan fungsi maya boleh berfungsi bersama-sama Dengan mereka bentuk fungsi lebihan maya dalam kelas asas, kelas terbitan hanya boleh memuatkan versi gabungan parameter tertentu, dengan itu menyediakan polimorfisme yang lebih fleksibel, seperti mengira jenis yang berbeza dalam kes praktikal. bentuk dari asalnya.

Kaedah penyahpepijatan fungsi maya: tetapkan titik putus untuk melangkah melalui;

Langkah penyelesaian untuk php5 tidak mendengar port 9000: 1. Semak fail konfigurasi PHP-FPM 2. Mulakan semula perkhidmatan PHP-FPM 3. Matikan tembok api atau konfigurasikan pemajuan port 4. Semak sama ada proses lain menduduki port 9000;

Perbezaan sintaks antara php7 dan php5 ialah: 1. PHP7 memperkenalkan pengisytiharan jenis yang ketat, manakala jenis pembolehubah PHP5 adalah tersirat 2. PHP7 memperkenalkan sokongan untuk pengisytiharan jenis skalar, tetapi PHP5 tidak memperkenalkan operator NULL Merge; PHP5 menyemak sama ada pembolehubah wujud dan tidak batal, anda perlu menggunakan pernyataan bersyarat 4. PHP7 menambah operator perbandingan baharu "<=>", tetapi PHP5 tidak 5. PHP7 memperkenalkan kelas tanpa nama yang baharu, manakala PHP5 tidak.

Dalam C++, fungsi rakan berinteraksi dengan fungsi maya supaya fungsi rakan boleh mengakses fungsi maya dan memanggil fungsi rakan dalam kelas terbitan untuk mengakses ahli persendirian kelas asas. Interaksi ini boleh digunakan untuk mengakses data yang tersembunyi dalam hierarki warisan atau untuk melaksanakan tingkah laku polimorfik.

Fungsi maya ialah mekanisme polimorfisme yang membenarkan kelas terbitan mengatasi fungsi ahli kelas asasnya: Pengisytiharan: Tambah kata kunci maya sebelum nama fungsi. Panggilan: Menggunakan penunjuk atau rujukan kelas asas, pengkompil akan secara dinamik mengikat pelaksanaan yang sesuai bagi kelas terbitan. Kes praktikal: Dengan mentakrifkan kelas asas Bentuk dan kelas terbitannya Segiempat dan Bulatan, aplikasi fungsi maya dalam polimorfisme ditunjukkan untuk mengira luas dan melukis bentuk.
