ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Miras, nesne yönelimli programlama metodolojisinin temel ilkelerinden biridir. Miras, sıfırdan oluşturmak yerine yeni bir sınıf oluşturmak için mevcut bir sınıfın yeteneğini genişletmeyi sağlayan bir yazılım modelleme yaklaşımıdır.
PHP, nesne modelinde mirası uygulamak için tüm işlevselliği sağlar. PHP yazılım geliştirmede mirasın dahil edilmesi, kodun yeniden kullanılması, gereksiz kod çoğaltmasının kaldırılması ve mantıksal organizasyonla sonuçlanır.
Çoğu işlevselliği halihazırda var olan bir sınıfta iyi tanımlanmış yeni bir sınıf tasarlamanız gerektiğini düşünün. Kalıtım, var olan sınıfı genişletmenize, özelliklerini eklemenize veya kaldırmanıza ve yeni bir sınıf geliştirmenize olanak tanır. Aslında, PHP'nin var olan ve yeni sınıflar arasında kalıtım ilişkisi kurmak için "extends" anahtar sözcüğü vardır.
Kalıtım, yeni bir sınıfın (bundan sonra miras alınan sınıf, alt sınıf, çocuk sınıf, vs. olarak anılacaktır) var olan bir sınıfla (temel sınıf, üst sınıf, ebeveyn sınıf, vs. olarak anılacaktır) "IS A" ilişkisine sahip olması durumunda ortaya çıkar.
PHP'de, başka bir sınıf genişletilerek yeni bir sınıf tanımlandığında, alt sınıf, genel ve korumalı yöntemleri, özellikleri ve sabitleri ana sınıftan devralır. Miras alınan bir yöntemin işlevselliğini geçersiz kılmakta özgürsünüz, aksi takdirde ana sınıfta tanımlandığı gibi işlevselliğini koruyacaktır.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class myclass {
public function hello() {
echo "Hello from the parent class" . PHP_EOL;
}
public function thanks() {
echo "Thank you from parent class" . PHP_EOL;
}
}
class newclass extends myclass {
public function thanks() {
echo "Thank you from the child class" . PHP_EOL;
}
}
# object of parent class
$obj1 = new myclass;
$obj1->hello();
$obj1->thanks();
# object of child class
$obj2 = new newclass;
$obj2->hello();
$obj2->thanks();
?>
Aşağıdaki çıktıyı üretecektir:
Hello from the parent class
Thank you from parent class
Hello from the parent class
Thank you from the child class
Daha önce belirtildiği gibi, çocuk sınıfı ebeveynin genel ve korumalı üyelerini (özelliklerini ve yöntemlerini) devralır. Çocuk sınıfı ek özellikler veya yöntemler sunabilir.
Aşağıdaki örnekte, ana sınıf olarak Book sınıfını kullanıyoruz. Burada, Book sınıfını genişleten bir ebook sınıfı oluşturuyoruz . Yeni sınıfın ek bir özelliği var; format (ebook'un dosya biçimini belirten, EPUB, PDF, MOBI vb.). ebook sınıfı, ebbok verilerini başlatmak ve çıktısını almak için iki yeni yöntem tanımlar; sırasıyla getebook() ve dispebook().
Örnek
Miras örneğinin tam kodu aşağıda verilmiştir.
PHP:
<?php
class Book {
/* Member variables */
protected int $price;
protected string $title;
public function getbook(string $param1, int $param2) {
$this->title = $param1;
$this->price = $param2;
}
public function dispbook() {
echo "Title: $this->title Price: $this->price \n";
}
}
class ebook extends Book {
private string $format;
public function getebook(string $param1, int $param2, string $param3) {
$this->title = $param1;
$this->price = $param2;
$this->format = $param3;
}
public function dispebook() {
echo "Title: $this->title Price: $this->price\n";
echo "Format: $this->format \n";
}
}
$eb = new ebook;
$eb->getebook("PHP Fundamentals", 450, "EPUB");
$eb->dispebook();
?>
getebook() fonksiyonuna daha yakından bakarsanız, ilk iki atama ifadesi aslında ebook sınıfının miras aldığı getbook() fonksiyonudur. Bu nedenle, bunu parent anahtar sözcüğü ve kapsam çözümleme operatörü ile çağırabiliriz.
Ana sınıfın constructor'ındaki constructor, alt sınıf tarafından miras alınır ancak alt sınıf bir constructor tanımlıyorsa, alt sınıfta doğrudan çağrılamaz.
Bir ana kurucuyu çalıştırmak için, alt kurucu içinde parent::__construct() çağrısı yapılması gerekir.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class myclass{
public function __construct(){
echo "This is parent constructor". PHP_EOL;
}
}
class newclass extends myclass {
public function __construct(){
parent::__construct();
echo "This is child class destructor" . PHP_EOL;
}
}
$obj = new newclass();
?>
Aşağıdaki çıktıyı üretecektir:
This is parent constructor
This is child class destructor
Ancak, eğer çocuğun bir kurucusu yoksa, o zaman normal bir sınıf metodu gibi (eğer private olarak bildirilmemişse) ebeveyn sınıftan miras alınabilir.
Örnek
Aşağıdaki örneğe bir göz atın.
PHP:
<?php
class myclass{
public function __construct(){
echo "This is parent constructor". PHP_EOL;
}
}
class newclass extends myclass{ }
$obj = new newclass();
?>
PHP, birden fazla ebeveyni genişleterek bir sınıf geliştirmeye izin vermez. Sınıf B'nin sınıf A'yı, sınıf C'nin sınıf B'yi genişlettiği hiyerarşik kalıtım olabilir, vb. Ancak PHP, sınıf C'nin hem sınıf A'yı hem de sınıf B'yi genişletmeye çalıştığı çoklu kalıtımı desteklemez. Ancak bir sınıfı genişletebilir ve bir veya daha fazla arayüzü uygulayabiliriz.