Mengatasi dalam PHP

WBOY
WBOYasal
2024-08-29 12:59:101141semak imbas

Overriding ialah konsep Pengaturcaraan Berorientasikan Objek yang serupa dengan konsep seperti Kelas, Objek, Enkapsulasi, Polimorfisme, Beban Terlebih dll dalam PHP. Mengatasi fungsi dan kelas dilakukan apabila kaedah dalam kelas terbitan dicipta yang sama seperti kaedah dalam kelas asas atau kelas induk. Kedua-dua kaedah ini mempunyai nama yang sama dan bilangan argumen yang sama.

IKLAN Kursus Popular dalam kategori ini PEMBANGUN PHP - Pengkhususan | 8 Siri Kursus | 3 Ujian Olok-olok

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Bagaimana Overriding Berfungsi?

Mari kita terokai cara kerja utama dalam PHP.

  • Overriding ialah konsep di mana kelas terbitan kelas asas melakukan tindakan yang sama seperti kelas asas. Penggantian ini boleh pada kaedah atau kelas. Jika kaedah mengatasi maka nama kaedah parameter, penentu capaian didapati sama dengan kaedah kelas induk. Apabila tiada perubahan yang ditemui dalam pelaksanaan kaedah dalam subkelas yang diperolehi daripada kelas asas, pada masa itu dikatakan kaedah subkelas telah mengatasi kaedah kelas asas.
  • Andaikan terdapat kelas yang dipanggil Person yang mempunyai sifat dan kaedah datanya sendiri. Ini ialah orang induk atau kelas asas dengan kaedah yang dipanggil speak(). Kini terdapat satu lagi kelas yang dipanggil Employee yang memanjangkan kelas Person. Kini, kelas Pekerja ini mempunyai sifat dan kaedah datanya sendiri dan juga mempunyai kaedah yang sama seperti kelas induk cth.speak().
  • Kaedah, speaks () ini terdapat dalam kelas asas dan juga dalam kelas terbitan.
  • Sekarang apa yang berlaku ialah apabila kelas dijadikan instantiated atau apabila objek dicipta, kaedah speak() yang manakah akan dilaksanakan, bermakna bahawa bercakap tentang kelas asas atau bercakap tentang kelas terbitan dilaksanakan bergantung pada objek daripada kelas dipanggil.
  • Dalam erti kata lain, jika objek kelas Orang dicipta maka kaedah speak() kelas Orang dipanggil dan oleh itu dilaksanakan. Tetapi jika objek kelas Pekerja dicipta maka kaedah speak() kelas terbitan akan dilaksanakan, yang mengatasi kelas speak() kelas induk.
  • Dan berikut ialah cara mengatasi berlaku dengan contoh
  • Dalam contoh di bawah, terdapat dua kelas, kelas asas dan kelas terbitan. Kelas terbitan memanjangkan kelas asas. Kelas ini dimulakan dan dua objek $obj1 dan $obj2 dicipta. $obj1 ialah objek BaseClass dan $obj2 ialah objek kelas terbitan. Objek ini selanjutnya memanggil kaedah yang diisytiharkan dalam kelas masing-masing.
  • Di sini anda akan melihat bahawa kelas asas dan kelas terbitan mempunyai kaedah yang sama dipanggil ABC(). Apabila anda melaksanakan program ini, anda akan melihat bahawa kaedah ABC() telah mengatasi kaedah kelas asas ABC().

Contoh Kaedah Overriding

Contoh kaedah overriding ditulis di bawah.

Kod:

class BaseClass {
public function ABC() {
echo "<br /> In the base class";
}
}
class DerivedClass extends BaseClass {
// override the method ABC() of base class
public function ABC() {
echo "<br />In the derived class";
}
}
$obj1 = new BaseClass;
$obj1->ABC();
$obj2 = new DerivedClass;
$obj2->ABC();

Output:

Mengatasi dalam PHP

Mengatasi dengan Pengubah Suai Akses

Terdapat tiga pengubah suai akses.

  1. awam: Boleh diakses dari mana-mana sahaja dalam program.
  2. peribadi: Boleh diakses daripada kelas induk sahaja.
  3. dilindungi: Boleh diakses daripada kelas asas dan kelas terbitan.

Seperti yang kita ketahui kaedah yang dilindungi boleh diakses daripada kelas asas dan kelas terbitan ia boleh didedahkan kepada umum dalam subkelas tetapi bukan peribadi kerana peribadi hanya boleh diakses dalam kelas induk. Juga jika kaedah kelas mempunyai penentu akses sebagai awam maka kaedah mengatasi dalam kelas terbitan tidak boleh diisytiharkan sebagai peribadi dan dilindungi

Contoh Penggantian Kaedah menggunakan Pengubah Suai Akses

Contoh penggantian menggunakan pengubah suai akses ditulis di bawah.

Kod:

class BaseClass {
private function ABC() {
echo "<br/>In the base class Method : ABC";
}
protected function XYZ() {
echo "<br/>In the base class Method : XYZ";
}
}
class DerivedClass extends BaseClass {
// overriding with public for wider accessibility
public function ABC() {
echo "<br/> In the derived class Method : ABC";
}
// overriding method
// with more accessibility
public function XYZ() {
echo "<br/>In the derived class Method : XYZ";
}
}
//$obj1 = new BaseClass;
//$obj1->ABC();   //throws fatal error
//$obj1->XYZ();          //throws fatal error
$obj2 = new DerivedClass;
$obj2->ABC();
$obj2->XYZ();

Output:

Mengatasi dalam PHP

Mengatasi dengan Kata Kunci Akhir

Kata kunci terakhir digunakan untuk kelas dan kaedah. Kaedah dan Kelas, bukan pembolehubah boleh ditindih.

Penggantian Kaedah Akhir

Apabila kaedah atau kelas diisytiharkan sebagai muktamad maka mengatasi kaedah atau kelas itu tidak boleh dilakukan juga warisan dengan kelas tidak boleh dilakukan.

Contoh Penggantian Kaedah menggunakan Kata Kunci Akhir

Contoh penggantian menggunakan kata kunci akhir ditulis di bawah.

Kod:

class BaseClass {
// Final method – display
// this cannot be overridden in base class
final function display() {
echo "<br /> In the Base class display function";
}
/// method - ABC
function ABC() {
echo "<br /> In the Base cLass ABC function";
}
}
class DerivedClass extends BaseClass {
function ABC() {
echo "<br /> In the Derived class ABC function";
}
}
$obj1 = new DerivedClass;
$obj1->display();
$obj1->ABC();

Output:

Mengatasi dalam PHP

Final Class Overriding

A class declared as final cannot be inherited. A Final Class further have final method along with other methods. But since the class itself is declared final there is no use of declaring a final method in a final class.

Example of Class Overriding using Final Keyword

The example of class overriding using final keyword is written below.

Code:

// class declared as final cannot be overridden
final class BaseClass {
// method - ABC
function ABC() {
echo "<br> In the BaseClass Method ABC function";
}
// Final method - display
function display() {
echo "<br> In the BaseClass Method display function";
}
}
// here you cannot extend the base class
// as the base class is declared as final
$obj1 = new BaseClass;
$obj1->display();
$obj1->ABC();

Output:

Mengatasi dalam PHP

Atas ialah kandungan terperinci Mengatasi 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
Artikel sebelumnya:PHP XORArtikel seterusnya:PHP XOR