Kata Kunci parent::
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 22 dari 91.
Saat sebuah class anak mewarisi dari class induk, terkadang kamu perlu mengakses method atau property milik class induk secara langsung. Kata kunci parent:: memungkinkan kamu memanggil implementasi class induk dari dalam class anak.
Ini sangat berguna dalam constructor ketika child perlu menginisialisasi property milik parent sekaligus menyiapkan property-nya sendiri:
<?php
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
class Dog extends Animal {
public $breed;
public function __construct($name, $breed) {
parent::__construct($name);
$this->breed = $breed;
}
public function describe() {
return "$this->name is a $this->breed";
}
}
$dog = new Dog("Max", "Labrador");
echo $dog->describe();
Output:
Max is a LabradorDengan memanggil parent::__construct($name), class turunan menggunakan kembali logika inisialisasi class induk alih-alih menduplikasinya. Tanpa pemanggilan ini, property $name tidak akan pernah ditetapkan.
Kamu bisa menggunakan parent:: untuk memanggil method parent apa pun, bukan hanya constructor. Ini menjadi sangat penting ketika kamu ingin memperluas perilaku suatu method, bukan menggantinya sepenuhnya.
Inti Penting: Kata kunci parent:: menyediakan cara untuk mengakses implementasi dari class induk. Ini penting untuk merangkai constructor dengan benar dan mengembangkan fungsionalitas yang diwarisi, alih-alih menulis ulang.
Tantangan
MudahMari kita bangun sistem katalog produk yang menunjukkan cara class anak dapat memperluas fungsi class induk menggunakan kata kunci parent:: untuk merangkai konstruktor dengan benar dan mengembangkan method yang diwarisi.
Kamu akan mengatur kodemu dalam tiga file:
Product.php: Definisikan classProductyang berfungsi sebagai dasar untuk semua produk. Class ini harus memiliki property publik$namedan$price. Konstruktor menerima nama dan harga, lalu menetapkan kedua property tersebut. Sertakan methodgetDetails()yang mengembalikan"[name]: $[price]".ElectronicProduct.php: Definisikan classElectronicProductyang memperluasProduct. Sertakan file Product di bagian atas. Class ini menambahkan property$warranty(dalam bulan). Konstruktor harus menerima nama, harga, dan garansi: gunakanparent::__construct()untuk menginisialisasi nama dan harga melalui class induk, lalu tetapkan sendiri garansinya. Buat methodgetDetails()yang mengembangkan implementasi class induk: panggilparent::getDetails()dan tambahkan" (Warranty: [warranty] months)"di akhir.main.php: Sertakan file ElectronicProduct. Kamu akan menerima tiga input: nama produk, harga (sebagai string yang perlu dikonversi menjadi float), dan masa garansi (sebagai string yang perlu dikonversi menjadi integer). BuatElectronicProductdengan nilai-nilai ini dan cetak hasil pemanggilangetDetails().
Tantangan ini menunjukkan kekuatan sebenarnya dari parent::. Tidak hanya untuk merangkai konstruktor, tetapi juga untuk memperluas perilaku method. ElectronicProduct milikmu menggunakan kembali logika pemformatan dari class induk dan menambahkan detailnya sendiri, sehingga menghindari duplikasi kode sekaligus menghasilkan output yang lebih kaya.
Coba sendiri
<?php
require_once 'ElectronicProduct.php';
// Baca input
$name = trim(fgets(STDIN));
$price = floatval(trim(fgets(STDIN)));
$warranty = intval(trim(fgets(STDIN)));
// TODO: Buat ElectronicProduct dengan nilai input
// dan cetak hasil pemanggilan getDetails()
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online