Polimorfizm, değişik şekilleri alabilme anlamına gelmektedir. Bir sınıfa ait nesne, o sınıfın alt sınıflarından birinin şekline bürünebilir. Bu nesneler içeride farklı çalışmalarına rağmen dışarıdan bakıldığında aynı görülür.
Şimdi bir örnek vererek konuyu anlamaya çalışalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | class Hayvan { public function ses() { print 'Bu methodu direk cagiramazsiniz'; } } class Kopek extends Hayvan { public function ses() { print 'hav hav'; } } class Kedi extends Hayvan { public function ses() { print 'miyav'; } } function printSes($obj) { if ($obj instanceof Hayvan) { $obj->ses(); } else { print 'yanlis sinif secildi'; } } $array = array(new Kopek(), new Kedi()); foreach ( $array as $arr) { printSes($arr); } ?> |
ekran çıktısı
hav hav
miyav
interface ve abstract kullanarak örneğimizi geliştirelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <? interface Cevirici { public function cevir(); public function tip(); } abstract class Para { public function getDeger($deger) { return $deger * 10; } } class Dolar extends Para implements Cevirici { private $deger; public function __construct( $deger, $parite) { $this->deger = parent::getDeger($deger); $this->parite = $parite; } public function cevir() { return ($this->deger * $this->parite); } public function tip() { return "$/TL"; } } class Altin implements Cevirici { private $ayar; private $parite; private $deger; public function __construct( $deger, $parite, $ayar ) { $this->deger = $deger; $this->parite = $parite; $this->ayar = $ayar; } public function cevir() { return ($this->deger * $this->parite); } public function tip() { return $this->ayar." ayar / TL"; } } function islem( Cevirici $c ) { echo "sonuc: "." {$c->cevir()} {$c->tip()}\n"; } $array = array(new Dolar(100, 2),new Altin(20, 50, 24)); foreach( $array as $arr ) { islem( $arr ); } ?> |
ekran çıktısı
sonuc: 2000 $/TL
sonuc: 1000 24 ayar / TL
benzer konular:














design patterns