[PHP] OOP DƏRS 2 — Funksiyaların davamı , stringlər , varislik anlayışı

Keçən dərsdə OOP-un nə olduğunu və hansı məqsədlər üçün istifadə olunduğunu anlamağa çalışmışdıq.

Bu dərsdə biz OOP-un metodlarında daha dərinə irəliləcəyik. OOP geniş bir anlayışdır və daim inkişaf edir və təkminləşdirilir. Sanki hər hansı bir aysberqin görünən tərəfidir : )

Hə gəlin OOP-un ikinci hissəsi ilə tanış olaq

OOP-un ikinci hissəsinə unset() funksiyası ilə başlamaq istəyirəm.
unset() funksiyası dağıdıcını açıq şəkildə trigger etmək üçün istifadə olunur və unset() funksiyası obyekti dağıtmaq üçün istifadə olunur.

<?php 

class MyClass
{
public $prop1 = "Mən qiymətəm";

public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı!<br />';
}

public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı.<br />';
}

public function setProperty($newval)
{
$this->prop1 = $newval;
}

public function getProperty()
{
return $this->prop1 . "<br />";
}
}

$obj = new MyClass;
echo $obj->getProperty();
unset($obj);
echo "Sənədin sonu.<br />";

?>

Brouzeri yeniləyəndən sonra nəticə aşağıdakı kimi olacaq

Bu sinif MyClass başlandı
Mən qiymətəm
Bu sinif MyClass dağıdıldı
Sənədin sonu.

Stringlərə Çevirmə

PHP də məlumat tipləri aşağıdakı kimi ola bilər

  1. * PHP məlumat tiplərinə daxildir. PHP’dəki kod quruluşuna görə hər cür məlumatı yalnız bir dəfə təyin etmək ilə kodun hər yerində istifadə edə bilərsiniz. Məlumat tipləri əsas olaraq 8 dənədir:
  2. Boolean: Ən sadə növdür. Bir məntiqi ifadənin nəticəsi TRUE və ya FALSE olan bir düzgünlük dəyəridir. Məsələn 0, “FALSE”, 0.0, “Xidmətçisiz Dize”, “Boş”, “NULL” FALSE (səhv) verər.
  3. Integer (int): Tam ədədlərdir. — Sonsuzluqdan, + sonsuzluğa qədər olan hər tam ədəd yəni onalıksız sayı bir integer.
  4. Float: Bütün Real ədədlər yəni Həqiqi Ədədlər Float növünə mənsubdur. — Sonsuzluqdan + sonsuzluğa qədər olan onluq ədədlər, rasional ədədlər, irrasional ədədlər daxildir.
  5. String : Bütün yazı cinsləri daxildir. PHPdə stringin təyini mütləq amma mütləq “”, , işarələrindən hər hansı birinin içinə qoymaq lazımdır. Nümunə olaraq “Salam”, “Necəsən?”, ‘PHP yazısıdır’, ‘Bu bir string’ kimidir.
  6. Array: Yəni birdən çox dəyər. PHPdə dəyərləri ifadə $ ad ifadəsini istifadə edilir. Buna görə $ ad [1], $ ad [2] kimi ifadələr ola bilər.
  7. Object (obj): obyektlərdir. Class yəni sinif yazarkən obyekt əsaslı istifadə edilir.
  8. Resource: Qaynaq tipidir. Məlumat bazasından gələn məlumatların dəyişən olmasından qaynaqlı bu tip ilə saxlanılır.
  9. NULL: Undefined, elan edilməmiş, Yox, Naməlum, Hökmsüz ifadələrdir. Əgər bir dəyişən “”, , ya da empty isə NULL deyil, çünki boş bir string olar. NULL isə heç təyin olunmamış şeylərdir.

Uzun sözün qısası indi isə OOP-da stringlərə çevirməyə nəzər salaq.

Bir skript MyClass-da nəticəni string kimi çıxarmağa çalışırsa bir səhvdən qaçınmaq üçün , digər sehrli metod olan __toString() -dan istifadə etməliyik.
__toString() olmadan, obyekti bir string kimi çıxış verməyəçalışsaq səhvlə qarşılaşacağıq. Sehrli bir metod olmadan obyektin çıxmasını təmin etmək üçün echo — dan istifadə etməyə cəhd edin:

<?php
class MyClass
{
public $prop1 = "Mən qiymətəm";
public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı!<br />';
}
public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı.<br />';
}
public function setProperty($newval)
{
$this->prop1 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
}
}
$obj = new MyClass;
echo $obj;
unset($obj);
echo "Sənədin sonu.<br />";
?>

Belə bir nəticə olacaq

Bu sinif MyClass başlandı

Catchable fatal error: Object of class MyClass could not be converted to string in /* Burda faylin yeri ve sehvlik yeri yazilacaq*/

Xətanın qarşısını almaq üçün __toString() methodundan istifadə edək

<?php
class MyClass
{
public $prop1 = "Mən qiymətəm";
public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı<br />';
}
public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı<br />';
}
public function __toString()
{
echo "toString methodundan istifade ederek: ";
return $this->getProperty();
}
public function setProperty($newval)
{
$this->prop1 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
}
}
$obj = new MyClass;
echo $obj;
unset($obj);
echo "Sənədin sonu.<br />";
?>

Bu halda obyekti string-ə çevirmək üçün getProperty() funksiyasından istifadə olunmuşdur. Brouzeri yeniləyin və nəticə belə olacaq

Bu sinif MyClass başlandı
toString() metodundan istifadə edərək : Mən qiymətəm
Bu sinif MyClass dağıdıldı
Sənədin sonu

Sinif varisliyindən istifadə etmə

Siniflər extends açar sözündən istifadə etməklər digər bir sinifin metodlarının və obyektlərinin varisi ola bilər (varislik edə bilər). Məsələn, MyClass-ı genişləndirən və bir üsul əlavə edən ikinci bir sinif yaratmaq üçün aşağıdakıları əlavə etməlisiniz :

<?php
class MyClass
{
public $prop1 = "Mən qiymətəm";

public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı<br />';
}

public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı<br />';
}

public function __toString()
{
echo "toString metodundan istifadə edərək: ";
return $this->getProperty();
}

public function setProperty($newval)
{
$this->prop1 = $newval;
}

public function getProperty()
{
return $this->prop1 . "<br />";
}
}

class MyOtherClass extends MyClass
{
public function newMethod()
{
echo "Yeni metod bu sinifdən " . __CLASS__ . ".<br />";
}
}

$newobj = new MyOtherClass;
echo $newobj->newMethod();
echo $newobj->getProperty();

?>

Brouzeri yeniləyəndə aşağıdakı nəticələri alacağıq :

Bu sinif MyClass başlandı
Yeni metod bu sinifdən MyOtherClass
Mən qiymətəm
Bu sinif MyClass dağıdıldı

Varis alınan xüsusiyyətləri və üsulları üzərində yazma

Yeni bir sinifdə mövcud bir obyektin və ya metodun davranışını dəyişdirmək üçün yeni bir sinifdə yenidən elan edərək onu yenidən yaza bilərsiniz:

<?php
class MyClass
{
public $prop1 = "Mən qiymətəm";
public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı<br />';
}
public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı<br />';
}
public function __toString()
{
echo "toString metodundan istifadə edərək: ";
return $this->getProperty();
}
public function setProperty($newval)
{
$this->prop1 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
}
}
class MyOtherClass extends MyClass
{
public function __construct()
{
echo "Yeni qurucu bu sinifdə " . __CLASS__ . ".<br />";
}
public function newMethod()
{
echo "Yeni metod bu sinifdən " . __CLASS__ . ".<br />";
}
}
$newobj = new MyOtherClass;
echo $newobj->newMethod();
echo $newobj->getProperty();
?>

Brouzeri yeniləyəndə aşağıdakı nəticəni əldə edəcəyik

Yeni qurucu bu sinifdə MyOtherClass.
Yeni metod bu sinifdən MyOtherClass.
Mən qiymətəm
Bu sinif "MyClass" dağıdıldı

Orijinal metodun funksionallığını qorumaq üsullarını əvəz etmək

Orijinal metodun saxlanılmasından sonra varisləşdirilmiş bir üsula yeni funksiyalar əlavə etmək üçün, əsas sözü parentaçar sözü ::ilə istifadə edin:

<?php
class MyClass
{
public $prop1 = "Mən qiymətəm";
public function __construct()
{
echo 'Bu sinif "', __CLASS__, '" başlandı<br />';
}
public function __destruct()
{
echo 'Bu sinif "', __CLASS__, '" dağıdıldı<br />';
}
public function __toString()
{
echo "toString metodundan istifadə edərək: ";
return $this->getProperty();
}
public function setProperty($newval)
{
$this->prop1 = $newval;
}
public function getProperty()
{
return $this->prop1 . "<br />";
}
}
class MyOtherClass extends MyClass
{
public function __construct()
{
parent::__construct(); 
echo "Yeni qurucu bu sinifdə " . __CLASS__ . ".<br />";
}
public function newMethod()
{
echo "Yeni metod bu sinifdən " . __CLASS__ . ".<br />";
}
}
$newobj = new MyOtherClass;
echo $newobj->newMethod();
echo $newobj->getProperty();
?>

Brouzeri yeniləyəndə bu nəticə ilə qarşılaşacağıq

Bu sinif "MyClass" başlandı
Yeni qurucu bu sinifdə MyOtherClass.
Yeni metod bu sinifdən MyOtherClass.
Mən qiymətəm
Bu sinif "MyClass" dağıdıldı
Düşünürəm ki, bu dərs üçün kifayətdir. Gələn dərslərdə görüşənədək : )

© 2018 Emin Mühəmmədi

Dərsin Kurikulumu

Dərs1 — OOP nədir ? Sıfırdan PHP-də necə OOP kodlamaq olar ?

Dərs2 — Funksiyaların davamı , stringlər , varislik anlayışı

Dərs3 — obyektlərin və metodların görünüşü , DocBlocks -dan istifadə edərək şərh yazma