Kasusnya seperti ini, ketika gw buat konstruktor di kelas Manusia seperti ini :
....
private $name;
public function __construct($name)
{
$this->name = $name;
}
....
Kemudian gw coba override tuh constructor di kelas Pegawai
...
private $salary
public function __construct($name, $salary)
{
$this->name = $name;
$this->salary = $salary;
}
...
Pada kelas pegawai gw buat constructor yang niatnya gue pengen override konstruktor kelas Manusia, dengan ini
parent::__construct();
tapi gue coba test pake
$this->name = $name;tanpa perintah
parent::__construct();Nah, saat gue coba buat objek, seakan-akan gue gak pernah ada hubungan dgan parent class 'Manusia'
$obj = new Karyawan($name,$salary);$name yg ada di Karyawan itu variabel baru kan? trus gunanya manggil parent buat apa? Terasa gak kepake gitu.. sama aja kan manggil parent cuma buat nambah $name;
mohon pencerahanya master sekalian.
Setahu gw kalo di Java, kalau ada konstruktor di Parent Class dan Child Class harus ada konstruktor pula, dan itupun wajib menggunakan super() dalam php parent:: dan kalau tidak maka akan error. Tapi kenapa di PHP seakan sah - sah aja tanpa error.
mohon penjelasannya ya master :(
jawaban:
property $name jika dideclare private tidak akan bisa diakses pada class turunannya dan harus pake parent::__construct($name)
biasanya kan kalau gabisa diakses keluar error undefined property master, tapi kenapa variabel $name masih bisa dijalankan tanpa error? Apakah beda antara $name yg di Parent sama di Child constructor saya di atas?
beda Java, beda PHP. klo di PHP, child class tidak harus ada konstruktor kecuali mau di override konstruktornya. Sedangkan variabel $name yg dijalankan tanpa error diatas itu bukan punya si Parent class tp ternyata dibentuk ulang oleh Child class dengan akses level public di method konstruktor yg di override itu. Nah biar berjalan dengan semestinya, jangan ditambahin konstruktor method di Child class.
class Manusia
{
private $name;
public function __construct($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
}
class Pegawai extends Manusia
{
private $salary;
public function showName()
{
echo $this->name;
// this will get error. Undefined property
// You should use : echo $this->getName()
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
$pegawai = new Pegawai('budi');
$pegawai->setSalary('20000');
$pegawai->showName(); // this will get error. Undefined property
var_dump($pegawai);
more:
facebook php indonesia
Tidak ada komentar:
Posting Komentar