PHP-də obyektlər. Obyektlər php-də obyektin yaradılması




Obyektlər

Obyekt obyekt yönümlü proqramlaşdırmanın əsas anlayışlarından biridir.

Obyekt dəyişəndir, onun nümunəsi adlı xüsusi şablondan istifadə etməklə yaradılmışdır sinif. Obyektlər və siniflər anlayışları obyekt yönümlü proqramlaşdırma (OOP) paradiqmasının ayrılmaz hissəsidir.

Obyekt verilənlərin (xüsusiyyətlərin) və onların emalı üçün funksiyaların (metodların) məcmusudur. Məlumat və metodlara sinif üzvləri deyilir. Ümumiyyətlə, obyekt inkapsulyasiyanı dəstəkləyən hər şeydir.

Obyektin daxili strukturu hesh-ə bənzəyir, istisna olmaqla, -> operatoru kvadrat mötərizədə deyil, ayrı-ayrı elementlərə və funksiyalara daxil olmaq üçün istifadə olunur.

Obyekti işə salmaq üçün dəyişəndə ​​obyektin nümunəsini yaradan yeni ifadədən istifadə edin.

sinif foo
{
funksiya do_foo()
{
echo "Doing foo." ;
}
}

$bar = yeni foo ;
$bar -> do_foo();
?>

Obyekt daxilində verilənlər və kod (sinif üzvləri) ictimai ola bilər və ya olmaya bilər. İctimai məlumatlar və sinif üzvləri proqramın obyektin bir hissəsi olmayan digər hissələri üçün əlçatandır. Lakin şəxsi məlumatlar və sinif üzvləri yalnız bu obyektin daxilində mövcuddur.

PHP-də siniflərin təsviri funksiya sözü ilə başlayır sinif:

sinif Sinif Adı (
// sinif üzvlərinin təsviri - verilənlər və onların işlənməsi üsulları
}

Elan üçün obyekt operatorundan istifadə edilməlidir yeni:

Obyekt = yeni SinifAdı;

Verilənlər var funksiya sözündən istifadə etməklə təsvir olunur. Metod adi bir funksiya ilə eyni şəkildə təsvir edilmişdir. Siz həmçinin metoda parametrləri ötürə bilərsiniz.

PHP-də nümunə sinif:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;
var $addr;

// üsullar:
funksiya Adı() (
əks-səda "

John

" ;
}

}

// Yaradın bir obyekt Coor sinfi:
$object = newCoor;
?>

PHP-də siniflərə və obyektlərə daxil olmaq

Biz siniflərin necə təsvir edildiyinə və obyektlərin necə yaradıldığına baxdıq. İndi biz sinif üzvlərinə daxil olmalıyıq, bunun üçün PHP-də operator var -> . Budur bir nümunə:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;

// üsullar:
funksiya Getname() (
əks-səda "

John

" ;
}

}


$object = newCoor;
// Sinif üzvlərinə giriş əldə edin:
$object -> ad = "Aleks" ;
echo $object -> ad ;
// "Alex" çap edir
// İndi sinif metoduna daxil olaq (əslində sinif daxilində funksiya):
$object -> Getname();
// Böyük hərflərlə "John" yazır
?>

Sinif daxilində sinif üzvlərinə daxil olmaq üçün siz göstəricidən istifadə etməlisiniz $bu, bu həmişə cari obyektə istinad edir. Dəyişdirilmiş üsul Getname():

funksiya Getname() (
echo $this->ad;
}

Eyni şəkildə bir üsul yaza bilərsiniz Setname():

funksiya Setname($name) (
$this->ad = $name;
}

İndi adı dəyişdirmək üçün metoddan istifadə edə bilərsiniz Setname():

$object->Setname("Piter");
$object->Getname();

Və burada tam kod siyahısı:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;

// üsullar:
funksiya Getname() (
echo $this -> ad ;
}

funksiya Setname($name) (
$this -> ad = $name ;
}

}

// Coor sinfinin obyektini yaradın:
$object = newCoor;
// İndi adı dəyişmək üçün Setname() metodundan istifadə edirik:
$object -> Setname("Nik");
// Giriş üçün, əvvəlki kimi Getname():
$object -> Getname();
// Skript "Nik" çap edir
?>

Göstərici $bu yalnız məlumat əldə etmək deyil, metodlara daxil olmaq üçün də istifadə edilə bilər:

funksiya Setname($name) (
$this->ad = $name;
$this->Getname();
}

Obyektlərin işə salınması

Bəzən obyektin inisializasiyasına - onun xassələrinin ilkin qiymətlərə təyin edilməsinə ehtiyac yaranır. Tutaq ki, sinfin adı Coordur və o, iki xüsusiyyəti ehtiva edir: şəxsin adı və yaşadığı şəhər. Məsələn, obyekti işə salacaq metod (funksiya) yaza bilərsiniz İçində():

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;
var $city;

// Başlama üsulu:
funksiyası Init($name) (
$this -> ad = $name ;
$ bu -> şəhər = "London" ;
}

}

// Coor sinfinin obyektini yaradın:
$object = newCoor;
// Obyekti işə salmaq üçün dərhal metodu çağırın:
$object -> Init();
?>

Əsas odur ki, obyekti yaratdıqdan dərhal sonra funksiyanı çağırmağı və ya yaratma arasında hansısa metodu çağırmağı unutma (operator yeni) obyekt və onun işə salınması (zəng İçində).

PHP-nin obyekt yaradılarkən müəyyən metodun avtomatik çağırılması lazım olduğunu bilməsi üçün ona siniflə eyni ad verilməlidir ( Coor):

Funksiya Koordinatı ($name)
$this->ad = $name;
$this->city = "London";
}

Obyekti işə salan metod konstruktor adlanır. Bununla belə, PHP-də destruktorlar yoxdur, çünki skriptlər çıxdıqda resurslar avtomatik olaraq buraxılır.

Obyektə çevirin

Obyekt obyektə çevrilirsə, dəyişdirilmir. Hər hansı digər tipli dəyər obyektə çevrilərsə, daxili stdClass sinifinin yeni nümunəsi yaradılır. Əgər dəyər boş idisə, yeni nümunə də boş olacaq. Hər hansı digər dəyər üçün o, skalyar üzv dəyişənin tərkibində olacaq:

PHP portal forumu. S.U.

Obyekt funksiyaya bənzəyir, lakin daha mürəkkəbdir. Obyekti bir adla birləşdirilən bir neçə funksiya və dəyişənin toplusu adlandırmaq olar.

Bir obyektin nə olduğunu başa düşməyin ən asan yolu bir nümunədir, lakin burada əvvəlcə bir az səbr etməli və nəzəriyyəni mənimsəməli olacaqsınız.

Fakt budur ki, obyektlər siniflər əsasında yaradılır və sinifləri proqramçı özü yaza bilər və ya başqa proqramçılar tərəfindən yazılmış siniflərlə işləyə bilər.

İndi bir sinif yaradaq.

Class TestClass ( // Bu, sinfin əsas hissəsidir. )

PHP-də biz sinif elan etmək üçün class sözündən istifadə edirik. Sinif adı hərflərə həssasdır.

Boş sinifin heç bir mənası yoxdur, ona görə də ona nəsə əlavə edək. Sinifdə dəyişənlər və funksiyalar ola bilər. Dəyişənlərə sinif xassələri, funksiyalar isə metodlar deyilir.

Sinif TestClass ( ictimai $message = "Salam!"; funksiya sayHello() ( "Salam!"; ) ) funksiyası

Dəyişən bəyannamədən əvvəl biz ictimai sözünü görürük, bu, əmlakımızın əhatə dairəsinin tərifidir. İngilis dilində public ictimai deməkdir, ona görə də adından aydın olur ki, bu sinif mülkiyyəti ictimaiyyətə açıqdır. Daha sonra əhatə dairəsi haqqında daha çox danışacağıq. Hələlik səbirli olun və mövcud nəzəriyyəni çeynəyin.

İndi TestClass sinifimizdə “Salam!” qiymətli $message dəyişəni var, bu dəyişən sinfin xassəsidir və sinfin metodu olan sayHello funksiyası var.

Beləliklə, bir sinifimiz var. İndi buna əsaslanaraq new operatorundan istifadə edərək obyekt yaradacağıq.

Class TestClass ( public $message = "Salam!"; funksiya sayHello() ( əks-səda "Salam!"; ) ) $govorilka = yeni TestClass();

Bizim obyektimiz sinfin surəti kimidir.

Növbəti addım obyektdən istifadə etməkdir. Obyektin xassələrinə və metodlarına daxil olmaq üçün -> operatorundan istifadə edin.

$govorilka obyektinin $message xassəsinə daxil olmaq üçün sadəcə $govorilka->message yazmalısınız. Nəzərə alın ki, biz artıq mesaj əmlakının adını $ işarəsi ilə qoymuruq.

Metod eyni şəkildə əldə edilir, lakin metodun sonundakı mötərizələri unutmaq olmaz, çünki biz müntəzəm funksiya ilə məşğul oluruq.

Yaratdığımız obyektin xassəsinə və metoduna daxil olmaq üçün bir nümunə:

mesaj; əks-səda "
"; $govorilka->Salam deyin();

Əmlak dəyərlərini dəyişə bilərik.

mesaj = "Salam."; echo $govorilka->mesaj; əks-səda "
"; $govorilka->Salam deyin();

Bir sinfə əsaslanaraq, istədiyiniz qədər obyekt yarada bilərsiniz.

mesaj = "Salam."; echo $govorilka->mesaj; əks-səda "
"; $govorilka->saySalam(); echo "
"; // İkinci obyekt yaradın $govorilka2 = new TestClass(); echo $govorilka2->message;

Gördüyümüz kimi $govorilka obyektinin xassəsinin dəyişdirilməsi TestClass sinfinin xassəsini dəyişmədi və ikinci obyekt onun nümunəsi olduğu sinfə uyğun gəlir.

Qeyd etmək lazımdır ki, obyektlər çox vaxt sinif nümunələri adlanır, ona görə də bu termini xatırlayın.

Bütün bunlara, bu siniflərə, obyektlərə niyə ehtiyacımız olduğu hələ tam aydın deyil... Gəlin daha realist bir sinif yaradaq və işə davam etmək üçün onun nümunəsindən istifadə edək.

\"$this->name\" yazın. Təsvir: $this->təsvir. Qiymət: $this->price"; ) ) $Mallar = yeni Mallar(); $Mallar->printGoods();

$this psevdo dəyişəninə diqqət yetirin, bu PHP-də öz kodu daxilində sinifin xassələrinə daxil olmaq üçün istifadə edilən qorunan dəyişəndir.

Yəni, Goods sinfinin $name xassəsinə öz metodundan daxil olmaq üçün biz $this->name konstruksiyasından istifadə etdik.

İndi nümunəni bir az böyüdək, onu daha mürəkkəb adlandırmaq çətindir. Belə ki:

növü. Ad: \"$this->ad\". Təsvir: $this->təsvir. Qiymət: $bu->qiymət."; ) ) $Mallar = yeni Mallar(); $Mallar->növ = "kitab"; $Mallar->ad = "Müharibə və Sülh"; $Mallar->təsvir = "Yağ" bir neçə cilddən ibarət kitab"; $Mallar->qiymət = "543.26"; $Mallar->printGoods();

Təbii ki, hər şeyi bu şəkildə etməyin mənası yoxdur. Tipik olaraq, obyekt unikal məhsul identifikatoru alır və bütün məlumatları MySQL verilənlər bazasından götürür.

id = $id; $this->type = "kitab"; $this->name = "Müharibə və Sülh"; $this->description = "Bir neçə cilddən ibarət qalın kitab"; $this->qiymət = "543,26"; ) funksiyası printGoods() ( echo " Məhsul ID: $this->id. Məhsul növü: $this->növ. Ad: \"$this->ad\". Təsvir: $this->təsvir. Qiymət: $this ->qiymət."; ) ) $Mallar = yeni Mallar(124); $Mallar->Mallar çapı();

Bu misalda yeni olan çox şey var.

Əvvəlcə __construct() metodunun adına diqqət yetirin. Bu PHP-də qorunan sözdür və obyekt yaradılan zaman bu metod avtomatik olaraq işləyəcək. Belə üsullara konstruktorlar deyilir.

Biz yeni Mallar(124) obyektini yaradanda 124 rəqəmini konstruktora ötürdük.Konstruktor əfsanəyə görə:), verilənlər bazasından müvafiq məhsulu aldı və obyektin xassələrini obyektin məlumatlarına uyğun olaraq təyin etdi. verilənlər bazası.

Bizim obyekt xassələrimiz qorunan əhatə dairəsinə malikdir, yəni qorunur. Biz belə bir əmlaka birbaşa müştəri kodundan daxil ola bilmərik.

Müştəri kodu sinif, obyekt və ya funksiyadan istifadə edən koddur. Bu vacib bir termindir, yadda saxla.

Müştəri kodundan qorunan əmlaka daxil olmaq cəhdinin nümunəsi:

qiymət;

Bu nümunə xətanı qaytaracaq: "Mühafizə olunan mallara daxil olmaq mümkün deyil". Bu belə olmalıdır, çıxış olmayan yerə gedirik.

Xülasə

Beləliklə, bu səhifədə nə öyrəndik:

  • Sinif nədir? Niyə bizə sinif lazımdır? Qorunan söz sinfindən istifadə edərək sinif necə yaradılır.
  • Sinif xassələri və metodları nədir.
  • Bəzi sinif obyektini yaratmaq üçün yeni operatordan necə istifadə etmək olar.
  • -> konstruksiyasından istifadə edərək obyektdən sinfin xassələrinə və metodlarına necə daxil olmaq olar.
  • Bir obyektdən sinif xüsusiyyətlərini necə dəyişdirmək olar.
  • Xüsusiyyətlərin və metodların əhatə dairəsi. Protected sözündən istifadə edərək əhatə dairəsini necə məhdudlaşdırmaq olar.
  • $this psevdo dəyişənindən istifadə edərək sinifdə metod xassəsinə necə daxil olmaq olar.
  • __construct() metodundan istifadə edərək konstruktorların yaradılması.

Bu, obyektlərin mənimsənilməsində yalnız ilk addımdır. Ümumiyyətlə, bütün bunların nə üçün lazım olduğu hələ tam aydın deyil. Ancaq səbirli olsanız, obyektlərin mənzərəsi bir az sonra aydınlaşacaq.

Öyrənməli olduğumuz növbəti şey PHP-də varislikdir. Bu hissədə biz nəinki irsiyyət mexanizmini öyrənəcəyik, həm də siniflərdən və obyektlərdən istifadənin həqiqətən aktual nümunəsini verə biləcəyik.

Zandstradan

səh 51 - metoda ötürülən arqumentin sinif növünə uyğunluğunun yoxlanılması (siz də massiv yoxlaya bilərsiniz).

səhifə 56 - instanceof operatoru (İngilis instansiyası), sol arqumentin sağ arqumentdəki obyekt növünə uyğun olub olmadığını yoxlayır.

PHP-də siniflər və obyektlər

Sinif obyekt yönümlü proqramlaşdırmada (OOP) əsas anlayışdır. Siniflər OOP-nin sintaktik əsasını təşkil edir. Onlar məntiqi cəhətdən əlaqəli məlumat və funksiyalar üçün bir növ "qablar" kimi düşünülə bilər (adətən adlanır - aşağıya baxın). Sadə dillə desək, sinif bir növ məlumat növüdür.

Bir sinif nümunəsidir bir obyekt. Obyekt verilənlərin () və onların emalı üçün funksiyaların (metodların) toplusudur. Xüsusiyyətlər və üsullar deyilir. Ümumiyyətlə, obyekt inkapsulyasiyanı dəstəkləyən hər şeydir.

Əgər sinfi verilənlər növü kimi qəbul etmək olarsa, o zaman obyekti dəyişən kimi qəbul etmək olar (analogiyaya görə). Skript bir neçə dəyişənlə olduğu kimi eyni sinifin bir neçə obyekti ilə eyni vaxtda işləyə bilər.

Obyekt daxilində verilənlər və kod (sinif üzvləri) ictimai ola bilər və ya olmaya bilər. İctimai məlumatlar və sinif üzvləri proqramın obyektin bir hissəsi olmayan digər hissələri üçün əlçatandır. Lakin şəxsi məlumatlar və sinif üzvləri yalnız bu obyektin daxilində mövcuddur.

PHP-də siniflərin təsviri funksiya sözü ilə başlayır sinif:

sinif Sinif Adı (
// sinif üzvlərinin təsviri - xassələri və onların emal üsulları
}

Obyekti elan etmək üçün operatordan istifadə etməlisiniz yeni:

Obyekt = yeni SinifAdı;

Məlumat funksiya sözündən istifadə etməklə təsvir edilir var. Metod adi istifadəçi tərəfindən müəyyən edilmiş funksiya ilə eyni şəkildə təsvir edilmişdir. Siz həmçinin metoda parametrləri ötürə bilərsiniz.

Xülasə edək: sinif bəyannaməsi açar sözlə başlamalıdır sinif(funksiya elanının açar sözlə başlamasına bənzər funksiyası). Sinifdə olan hər bir əmlak bəyannaməsindən əvvəl açar söz olmalıdır var. Xüsusiyyətlər PHP tərəfindən dəstəklənən istənilən növ məlumat ola bilər və kiçik fərqləri olan dəyişənlər kimi düşünülə bilər. Mülkiyyət bəyannamələrinin ardınca metod bəyannamələri gəlir ki, bu da istifadəçi tərəfindən müəyyən edilmiş tipik funksiya bəyannamələrinə çox oxşardır.

Ümumi qəbul edilmiş qaydalara əsasən, OOP sinif adları böyük hərflə başlayır və metod adlarında birincidən başqa bütün sözlər böyük hərflərlə başlayır (birinci söz kiçik hərflə başlayır). Əlbəttə ki, sizə uyğun olan hər hansı notadan istifadə edə bilərsiniz; əsas odur ki, standart seçmək və ona sadiq qalmaqdır.

PHP-də nümunə sinif:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;
var $addr;

// üsullar:
funksiya Adı() (
əks-səda "

John

" ;
}

}


$object = newCoor;
?>

PHP-də siniflərə və obyektlərə daxil olmaq

Biz siniflərin necə təsvir edildiyinə və obyektlərin necə yaradıldığına baxdıq. İndi biz sinif üzvlərinə daxil olmalıyıq, bunun üçün PHP-də operator var -> . Budur bir nümunə:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;

// üsullar:
funksiya Getname() (
əks-səda "

John

" ;
}

}

// Coor sinfinin obyektini yaradın:
$object = newCoor;
// Sinif üzvlərinə giriş əldə edin:
$object -> ad = "Aleks" ;
echo $object -> ad ;
// "Alex" çap edir
// İndi sinif metoduna daxil olaq (əslində sinif daxilində funksiya):
$object -> Getname();
// Böyük hərflərlə "John" yazır
?>

Sinif daxilində sinif üzvlərinə daxil olmaq üçün siz göstəricidən istifadə etməlisiniz $bu, bu həmişə cari obyektə istinad edir. Dəyişdirilmiş üsul Getname():

funksiya Getname() (
echo $this->ad;
}

Eyni şəkildə bir üsul yaza bilərsiniz Setname():

funksiya Setname($name) (
$this->ad = $name;
}

İndi adı dəyişdirmək üçün metoddan istifadə edə bilərsiniz Setname():

$object->Setname("Piter");
$object->Getname();

Və burada tam kod siyahısı:

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;

// üsullar:
funksiya Getname() (
echo $this -> ad ;
}

funksiya Setname($name) (
$this -> ad = $name ;
}

}

// Coor sinfinin obyektini yaradın:
$object = newCoor;
// İndi adı dəyişmək üçün Setname() metodundan istifadə edirik:
$object -> Setname("Nik");
// Giriş üçün, əvvəlki kimi Getname():
$object -> Getname();
// Skript "Nik" çap edir
?>

Göstərici $bu yalnız məlumat əldə etmək deyil, metodlara daxil olmaq üçün də istifadə edilə bilər:

funksiya Setname($name) (
$this->ad = $name;
$this->Getname();
}

Konstruktorlar

Çox vaxt bir obyekt yaratarkən bəzi xüsusiyyətlərin dəyərlərini təyin etməlisiniz. Xoşbəxtlikdən, OOP texnologiyasının tərtibatçıları bu vəziyyəti nəzərə aldılar və konsepsiyada tətbiq etdilər. Konstruktor bəzi xassələrin dəyərlərini təyin edən bir üsuldur (və digər üsulları da çağıra bilər). Yeni obyektlər yaradıldıqda konstruktorlar avtomatik olaraq çağırılır. Bunu mümkün etmək üçün konstruktor metodunun adı onu ehtiva edən sinfin adına uyğun olmalıdır. Konstruktor nümunəsi:

sinif veb səhifəsi (
var $bgcolor;
funksiyası Veb səhifə($rəng)(
$this -> bgcolor = $color ;
}
}

// Veb səhifə sinfinin konstruktoruna zəng edin
$səhifə = yeni Veb səhifə("qəhvəyi");
?>

Əvvəllər obyektin yaradılması və mülkiyyətin işə salınması ayrıca həyata keçirilirdi. Dizaynerlər bu hərəkətləri bir addımda yerinə yetirməyə imkan verir.

Maraqlı bir detal: keçən parametrlərin sayından asılı olaraq müxtəlif konstruktorlar çağırıla bilər. Baxılan misalda sinfin obyektləri Veb səhifə iki şəkildə yaradıla bilər. Birincisi, sadəcə obyekti yaradan, lakin onun xassələrini işə salmayan konstruktoru çağıra bilərsiniz:

$səhifə = yeni Veb səhifə;

İkincisi, obyekt sinifdə müəyyən edilmiş konstruktordan istifadə etməklə yaradıla bilər - bu halda siz Webpage sinfinin obyektini yaradırsınız və onun xassəsinə dəyər təyin edirsiniz. bgcolor:

$səhifə = yeni Veb səhifə("qəhvəyi");

Dağıdıcılar

PHP-də birbaşa dəstək yoxdur. Bununla belə, siz PHP funksiyasını çağırmaqla asanlıqla dağıdıcı simulyasiya edə bilərsiniz unset(). Bu funksiya dəyişənin məzmununu məhv edir və onun tutduğu resursları sistemə qaytarır. Obyektlərlə unset() dəyişənlərlə eyni şəkildə işləyir. Tutaq ki, siz bir obyektlə işləyirsiniz $Veb səhifəsi. Bu xüsusi obyektlə işləməyi bitirdikdən sonra funksiya çağırılır:

qurulmamış($Veb səhifə);

Bu əmr bütün məzmunu yaddaşdan silir $Veb səhifəsi. Encapsulation ruhunda zəng edə bilərsiniz unset() adlı metoda çevrilir məhv() və sonra zəng edin:

$Vebsayt->məhv et();

Destruktorları çağırmaq ehtiyacı yalnız böyük miqdarda resurs istifadə edən obyektlərlə işləyərkən yaranır, çünki skript tamamlandıqda bütün dəyişənlər və obyektlər avtomatik olaraq məhv edilir.

Obyektlərin işə salınması

Bəzən obyektin inisializasiyasına - onun xassələrinin ilkin qiymətlərə təyin edilməsinə ehtiyac yaranır. Fərz edək ki, sinif adıdır Coor və iki xüsusiyyəti ehtiva edir: şəxsin adı və yaşadığı şəhər. Məsələn, obyekti işə salacaq metod (funksiya) yaza bilərsiniz İçində():

// Yeni Coor sinfi yaradın:
sinif Coor (
// verilənlər (xassələr):
var$name;
var $city;

// Başlama üsulu:
funksiyası Init($name) (
$this -> ad = $name ;
$ bu -> şəhər = "London" ;
}

}

// Coor sinfinin obyektini yaradın:
$object = newCoor;
// Obyekti işə salmaq üçün dərhal metodu çağırın:
$object -> Init();
?>

Əsas odur ki, obyekti yaratdıqdan dərhal sonra funksiyanı çağırmağı və ya yaratma arasında hansısa metodu çağırmağı unutma (operator yeni) obyekt və onun işə salınması (zəng İçində).

PHP-nin obyekt yaradılarkən müəyyən metodun avtomatik çağırılması lazım olduğunu bilməsi üçün ona siniflə eyni ad verilməlidir ( Coor):

Funksiya Koordinatı ($name)
$this->ad = $name;
$this->city = "London";
}

Obyekti işə salan metod konstruktor adlanır. Bununla belə, PHP-də destruktorlar yoxdur, çünki skriptlər çıxdıqda resurslar avtomatik olaraq buraxılır.

Sinif elementlərinə daxil olmaq

Sinif elementlərinə operatordan istifadə etməklə daxil olur :: "iki nöqtə" "İki nöqtə"dən istifadə edərək sinif metodlarına daxil ola bilərsiniz.

Sinif metodlarına daxil olarkən proqramçı bu siniflərin adlarından istifadə etməlidir.

sinif A(
funksiya nümunəsi () (
əks-səda "Bu, orijinal A::example() funksiyasıdır.
"
;
}
}

B sinfi A-nı genişləndirir (
funksiya nümunəsi () (
əks-səda "Bu, B::example() funksiyasının ləğvidir.
"
;
A::misal();
}
}

// A sinfinə aid obyekt yaratmağa ehtiyac yoxdur.
// Aşağıdakıları çıxarır:
// Bu orijinal A::example() funksiyasıdır.
A::misal();

// B sinfinə aid obyekt yaradın.
$b = yeni B PHP portal forumu. S.U.

Bu dərslikdə siz PHP-də obyekt yönümlü proqramlaşdırmanın əsaslarını öyrənəcəksiniz. Siz ümumi olaraq OOP prinsiplərini öyrənəcək və PHP-də sadə skriptlərin yazılmasını öyrənəcəksiniz.

PHP-də OOP üzrə dərslər silsiləsinin birincisinə xoş gəlmisiniz! Bu seriyanın bütün dərslərini tamamlamaqla siz OOP-un əsas prinsipləri və konsepsiyaları haqqında məlumat əldə edəcəksiniz və PHP-də faydalı proqramların necə tez və asanlıqla yaradılmasını öyrənəcəksiniz.

Bu dərslikdə mən sizi sürətləndirməyə başlayacağam və sizə OOP-un əsas anlayışları haqqında məlumat verəcəyəm. Sən öyrənəcəksən:

  • OOP nədir
  • OOP sizə daha yaxşı PHP skriptləri yaratmağa necə kömək edəcək
  • siniflər, obyektlər, metodlar, sinif dəyişənləri kimi bəzi əsas anlayışlar
  • PHP skriptini yazmağa haradan başlamaq lazımdır

PHP obyektləri dünyasına dalmağa hazırsınız? Sonra davam et!

Obyekt yönümlü proqramlaşdırma nədir?

Əgər siz nə vaxtsa PHP-də xüsusi funksiyalar yaratmısınızsa və istifadə etmisinizsə, prosedur proqramlaşdırma üslubundan istifadə etmisiniz. Prosedur proqramlaşdırmasında siz adətən məlumat strukturları yaradırsınız - ədədlər, sətirlər, massivlər və s. - bəzi məlumatları saxlamaq və sonra bu strukturları bu məlumatları manipulyasiya edən xüsusi funksiyalarla emal etmək.

Obyekt yönümlü proqramlaşdırma və ya OOP irəlilədi, çünki burada biz məlumat strukturlarını və onları emal edən funksiyaları obyekt adlanan vahid obyektdə saxlayırıq. Verilənləri hansısa funksiya ilə emal etmək əvəzinə, siz həmin məlumatları obyektə yükləyirsiniz və sonra onu manipulyasiya etmək və istədiyiniz nəticəni əldə etmək üçün onun üsullarını çağırırsınız.

Çox vaxt OOP istifadə edərək yaradılmış obyektlər real varlıqları əks etdirir. Məsələn, saytınız üçün forum yaradırsınızsa, siz hər bir forum üzvü haqqında məlumatı (ad, giriş, e-poçt, parol və s.), eləcə də bu məlumatı emal edəcək üsulları saxlayacaq Üzv obyekti yaradacaqsınız ( qeydiyyat , avtorizasiya, çıxış, qadağa və s.).

Niyə OOP istifadə olunur?

Prosedur və obyekt yönümlü eyni şeyi etməyin iki fərqli yoludur. Bu o demək deyil ki, onlardan biri digərindən yaxşıdır - hər kəs istədiyi kimi yazır, beləliklə, hətta bu iki yanaşmanı bir skriptdə asanlıqla birləşdirə bilərsiniz.

Bununla belə, tərtibatçılar üçün OOP-un bəzi üstünlükləri bunlardır:

  • Real vəziyyətləri əks etdirmək daha asandır: yuxarıda qeyd etdiyim kimi, obyektlər real obyektləri - insanları, məhsulları, kartları, blog məqalələrini və s. əks etdirir. Bu, hər bir obyektin məqsədi olduğundan, tətbiqinizi yenicə tərtib etməyə başlayanda tapşırığı xeyli asanlaşdırır. obyektlər arasında əlaqələr aydın və başa düşülən olacaq bir məqsəd kimidir.
  • Modul proqramları yazmaq daha asandır: OOP modulların yazılmasını nəzərdə tutur. Kodunuzu modullara bölməklə onu idarə etmək, sazlamaq və genişləndirmək sizin üçün daha asan olacaq.
  • Dəfələrlə istifadə olunacaq kodu yazmaq daha asandır: Bir dəfədən çox istifadə edilə bilən kodun yazılması ərizə yazarkən vaxta qənaət edəcək və zaman keçdikcə bir çox proqramda istifadə edə biləcəyiniz bu növ modulların bütün kitabxanasını yarada bilərsiniz. tətbiqlər. OOP ilə belə kodu yazmaq nisbətən asanlaşır, çünki verilənlər strukturları və funksiyaları istənilən sayda istifadə oluna bilən vahid obyektdə əhatə olunur.

Bəzi Əsas Konsepsiyalar

Skriptlər yazmağa başlamazdan əvvəl siz sinif, obyekt, sinif dəyişəni və metod anlayışlarını yaxşı başa düşməlisiniz.

Dərslər

Sinif obyekt üçün çərçivədir. Bu, müəyyən edən kod parçasıdır:

  • Yaradılmış sinif obyektlərinin ehtiva edəcəyi məlumat növləri
  • Bu obyektləri ehtiva edən funksiyalar.

Bir OOP tətbiqi yaratdığınız zaman, adətən tətbiqinizdə müxtəlif növ obyektləri təmsil edəcək bir neçə sinif yaradacaqsınız. Məsələn, forum yaratmaq üçün siz Forum, Mövzu, Yazı və Üzv siniflərini yarada bilərsiniz.

Obyektlər

Obyekt sinif vasitəsilə yaradılan xüsusi bir dəyişən növüdür. O, faktiki məlumatları və onunla manipulyasiya etmək üçün funksiyaları ehtiva edir. Bir sinifdən istədiyiniz qədər obyekt yarada bilərsiniz. Obyektin hər bir funksiyası eyni sinifdən yaradılsa belə, başqa obyektdən müstəqildir.

Real qurumlarla müqayisə üçün:

  • Sinif avtomobil üçün çərçivədir: o, avtomobilin necə görünəcəyini və necə hərəkət edəcəyini müəyyən edir, lakin yenə də mücərrəd bir varlıqdır.
  • Obyekt tel kafesdən yaradılmış real avtomobildir: o, real xassələrə (sürət kimi) və davranışa (sürətlənmə və ya əyləc kimi) malikdir.

Qeyd: Obyekt çox vaxt sinfin mahiyyəti adlanır və sinfin obyektinin yaradılması prosesi həyata keçirmə adlanır.

Sinif Dəyişənləri

Müəyyən bir obyektdə saxlanılan məlumat dəyərləri sinif dəyişənləri adlanan xüsusi dəyişənlərə yazılır. Sinif dəyişənləri onun obyekti ilə sıx bağlıdır. Bir sinfin bütün obyektləri eyni dəyişənlərə malik olsalar da, onların dəyərləri fərqli ola bilər.

Metodlar

Sinifdə müəyyən edilmiş və həmin sinfin obyektlərində istifadə olunan funksiyalara metodlar deyilir. Onlar adi funksiyalardan çox da fərqlənmir - siz onlara dəyərlər ötürə bilərsiniz, onlar yerli dəyişənləri ehtiva edə və dəyərləri qaytara bilər. Bununla belə, metodlar daha çox obyekt dəyişənləri ilə işləyir. Məsələn, istifadəçiləri forumunuza daxil etmək üçün login() metodu loggedIn sinif dəyişənini doğru olaraq təyin edə bilər.

PHP-də necə sinif yaratmaq olar?

Artıq siniflərin, metodların, sinif dəyişənlərinin və obyektlərin nə olduğunu bildiyiniz üçün PHP kodunda bir neçə sinif və obyekt yaratmağın vaxtı gəldi.

Birincisi, həqiqətən sinfi necə yaratmağa baxaq. Əsasən, sinif yaratmaq üçün skript belə görünür:

Class ClassName ( // (sinif tərifi) )

Məsələn, forumunuz üçün Üzv sinfi yaradırsınızsa, bunu yazacaqsınız:

Sinif Üzvü ( // (sinif tərifi) )

Bu olduqca sadədir. Təbii ki, siz ona dəyişənlər və metodlar əlavə etməyincə bu sinif heç nə etməyəcək. Bununla belə, yuxarıdakı kod istifadə edilə bilən etibarlı PHP sinfi yaradır.

Yaxşı bir qayda: hər sinfi sinif adı ilə eyni adla ayrıca faylda yerləşdirin. Məsələn, Member sinifini Member.php faylına qoyun və onu məsələn, siniflər qovluğunda saxlayın.

PHP-də obyektləri necə yaratmaq olar?

Yeni açar sözündən istifadə edərək obyekt yarada bilərsiniz:

Yeni ClassName()

Bu kod ClassName sinifinin obyektini yaradacaq. Bu obyekti daha sonra istifadə etməli olacaqsınız, ona görə də onu dəyişəndə ​​saxlamalısınız. Məsələn, Member sinifinin obyektini yaradaq və onu $member dəyişənində saxlayaq:

$üzv = yeni Üzv();

Eyni sinifdən başqa bir obyekt də yarada bilərik:

$üv2 = yeni Üzv();

Bu iki obyekti eyni sinifdən yaratsaq da, $member və $member2 dəyişənləri bir-birindən müstəqildir.

Sinif dəyişənləri yaradın

İndi biz artıq siniflərin və sinif obyektlərinin necə yaradılacağını bildiyimizə görə, sinif dəyişənlərinin necə yaradılacağına baxaq. Bir sinfə əlavə edilə bilən sinif dəyişənləri üçün 3 giriş var:

  • İctimai sinif dəyişənləri (ictimai): əlçatan - yəni. onlar oxuna və/və ya dəyişdirilə bilər - skriptin istənilən yerində, bu kodun harada yerləşməsindən asılı olmayaraq - sinif daxilində və ya ondan kənarda
  • Şəxsi sinif dəyişənləri (özəl): yalnız sinif metodları üçün əlçatandır. Obyektləri kodun qalan hissəsindən ayırmaq üçün sinif dəyişənlərini özəl etmək daha yaxşıdır.
  • Qorunan sinif dəyişənləri: Öz sinifinizin metodları, eləcə də irsi siniflərin metodları üçün əlçatandır (irsilik haqqında daha sonra danışacağıq).

Sinif dəyişəni yaratmaq üçün public, private və ya protected açar sözünü yazın və sonra dəyişənin adını daxil edin:

Class ClassName ( ictimai $propertyName; özəl $propertyName; qorunan $propertyName; )

İstifadəçi adını saxlamaq üçün Üzv sinfimizə ictimai sinif dəyişəni əlavə edək:

Sinif Üzvü ( ictimai $username = ""; )

Diqqət yetirin ki, biz sinif dəyişənimizi işə salmışıq, onun dəyəri boş sətirdir, “”. Bu o deməkdir ki, yeni istifadəçi yaradılan zaman istifadəçi adı boş sətirə defolt olacaq. PHP-də adi dəyişənlər vəziyyətində olduğu kimi, sinif dəyişənlərinin işə salınması lazım deyil, lakin tənbəl olmamaq daha yaxşıdır. Əgər siz sinif dəyişənini işə salmırsınızsa, onun standart dəyəri sıfırdır.

Sinif Dəyişənlərinə Giriş

Obyektin dəyişəninə giriş əldə etmək üçün -> operatorundan istifadə edin:

$object->propertyName

Gəlin cəhd edək. Üzv sinfini və sinif dəyişənini elan edən, bu sinfin obyektini yaradan və sonra sinif dəyişəninin dəyərini təyin edən və onu ekranda göstərən skript yazaq:

istifadəçi adı = "Fred"; echo $member->username; // "Fred" çap edin?>

Bu kodu işə salın, o, $member->username sinif dəyişəninin dəyəri olan “Fred” sətrini göstərəcək. Gördüyünüz kimi, siz adi dəyişən kimi obyekt dəyişəni üzərində işləyirsiniz - onu dəyərə qoyub oxuya bilərsiniz.

Bir sinfə metodların əlavə edilməsi

Metodların yaradılması haqqında nə demək olar? Daha əvvəl qeyd etdiyim kimi, metodlar sadəcə sinfin bir hissəsi olan müntəzəm funksiyalardır. Beləliklə, onların eyni funksiya açar sözündən istifadə edilməsinə təəccüblənməyə bilərsiniz. Adi funksiyaların yaradılmasından yeganə fərq ondan ibarətdir ki, siz həmçinin onun bəyannaməsinə giriş identifikatorlarından birini (ictimai, özəl, qorunan) əlavə edə bilərsiniz. Bu şəkildə, metodlar sinif dəyişənlərinə bənzəyir:

Class ClassName ( ictimai funksiya metodName() ( // (kod) ) özəl funksiya metodAdı() ( // (kod) ) qorunan funksiya metodAdı() ( // (kod) ) )

Qeyd: sinif dəyişənlərində olduğu kimi, ictimai metodlar istənilən yerdən çağırıla bilər, özəl metodlar yalnız sinif daxilində çağırıla bilər və qorunan metodlar sinfin özündən və onun nəslindən çağırıla bilər.

Sinifimizə bəzi metodlar və sinif dəyişənləri əlavə etməyə çalışaq:

  • istifadəçini müəyyən etmək üçün özəl $loggedIn sinif dəyişəni, yəni. gəlib-gəlməsə də,
  • $loggedIn sinif dəyişənini doğru olaraq təyin edərək foruma daxil olacaq login() metodu,
  • $loggedIn sinif dəyişənini false olaraq təyin edərək forumdan çıxacaq logout() metodu,
  • $loggedIn sinif dəyişəninin dəyərini qaytaracaq isLoggedIn() metodu.

Budur kodumuz:

loggedIn = true; ) ictimai funksiyadan çıxış() ( $this->loggedIn = false; ) ictimai funksiya isLoggedIn() ($this->loggedIn; ) ) ?>

Yeni $this açar sözündən istifadə etdiyimizi görmüsünüz. Obyektin metodları kontekstində xüsusi dəyişən $this obyektin özünə aiddir. Obyekt metodunda $this istifadə edərək, metod obyektin istənilən sinif dəyişəninə və metoduna daxil ola bilər.

Məsələn, login() metodu obyektin $loggedIn sinif dəyişəninə $this->loggedIn vasitəsilə daxil ola bilər.

Yeri gəlmişkən, bizim sinif dəyişənimiz özəldir, ona görə də onu skriptin heç bir hissəsindən çağırmaq olmaz, ancaq login(), logout() və isLoggedIn() metodlarından istifadə etməklə. Bu, yaxşı yanaşmadır, çünki obyektin daxili hissələri (məsələn, istifadəçinin daxil olub-olmadığını necə dəqiq qeyd edir) kodun qalan hissəsindən ayrıdır. Mümkün olduqda, obyektlərinizin avtonom, mobil və qorunan olması üçün özəl sinif dəyişənlərindən istifadə etməyə çalışın.

Qeyd: nümunəmizdəki $username sinif dəyişəni ictimaidir. Mən bunu yalnız obyektin sinif dəyişənlərinə necə daxil ola biləcəyinizi nümayiş etdirmək üçün etdim. Həqiqi layihələrdə, bu dəyişəni özəl etmək və lazım olduqda istifadəçi adı dəyərlərini təyin etmək üçün xüsusi ictimai sinif dəyişənləri yaratmaq daha yaxşıdır.

Metodlardan istifadə

Obyektdə metodu çağırmaq üçün artıq tanış olduğunuz -> operatorundan istifadə edin.

$object->methodName()

Bu, adi funksiyanı çağırmaq kimi işləyir. Arqumentləri mötərizədə verə bilərsiniz (təbii ki, hər hansı arqument tələb edir) və metod çağırışı da sonra istifadə edə biləcəyiniz xüsusi dəyərləri qaytara bilər.

loggedIn = true; ) ictimai funksiyadan çıxış() ( $this->loggedIn = false; ) ictimai funksiya isLoggedIn() ( $this->loggedIn; ) ) $üzv = yeni Üzv(); $member->username = "Fred"; echo $member->username . "olur". ($üzv->
"; $member->login(); echo $member->username . " dir " . ($member->isLoggedIn() ? "girildi" : "çıxdı") .
"; $member->logout(); echo $member->username . " dir " . ($member->isLoggedIn() ? "girildi" : "çıxdı") .
"; ?>

Bu skript aşağıdakıları göstərəcək:

Fred sistemdən çıxdı Fred daxil oldu Fred sistemdən çıxdı

Bu necə işləyir:

  1. Member sinfini təsvir etdikdən sonra biz onun obyektini yaratdıq və onu $member dəyişənində saxladıq. Bu obyektin $username sinif dəyişəninə də “Fred” dəyərini verdik.
  2. Daha sonra istifadəçinin daxil olub-olmadığını müəyyən etmək üçün $member->isLoggedIn() metodunu çağırdıq. Bu üsul sadəcə $loggedIn sinif dəyişəninin dəyərini qaytarır. Bu sinif dəyişəninin standart dəyəri yalan olduğundan, $member->isLoggedIn() çağırışının nəticəsi yalan olacaq, beləliklə, "Fred sistemdən çıxdı" mesajı göstəriləcək.
  3. Sonra login() metodunu çağırırıq. O, $loggedIn sinif dəyişənini doğru olaraq təyin edəcək.
  4. İndi $member->isLoggedIn() metoduna zəng etdikdə o, true qaytaracaq və "Fred daxil olub" mesajını göstərəcək.
  5. $loggedIn xassəsinin dəyərini false olaraq təyin edən logout() metodunu çağıraq.
  6. $member->isLoggedIn() metodunu üçüncü dəfə çağıraq. O, indi false qaytaracaq, çünki $loggedIn xassəsi yenidən false olaraq təyin edilib. Beləliklə, “Fred sistemdən çıxdı” mesajı yenidən görünəcək.

Qeyd: bunu ilk gördüyünüz halda: ?: üçlü operatordur. Bu if...else bloklarının sadələşdirilmiş versiyasıdır. Bu tip operatorlar haqqında öyrənə bilərsiniz.

nəticələr

Bu dərslikdə siz PHP-də OOP-un əsaslarını öyrəndiniz. Siz kimi şeylər haqqında öyrəndiniz:

  • OOP nədir və nə üçün faydalıdır?
  • siniflər, obyektlər, sinif dəyişənləri və metodlar anlayışları
  • sinifləri və obyektləri necə yaratmaq olar
  • sinif dəyişənlərini necə yaratmaq və istifadə etmək
  • ictimai, özəl, qorunan giriş identifikatorları anlayışları
  • sinif metodlarını necə yaratmaq və istifadə etmək

Siz artıq bu barədə çox şey öyrənmisiniz və növbəti dərslərdə daha çox şey öyrənəcəksiniz. Bununla belə, verdiyim bütün nümunələri işləmisinizsə, möhkəm təməliniz var. OOP istifadə edərək proqramlar yaratmağa başlaya bilərsiniz.

Obyektləri təsvir edən siniflər olduğundan, təsvirə siniflərin tərifi ilə başlayacağıq.

Sinif Tərifi

Sinif obyektlər yaratmaq üçün istifadə olunan kod nümunəsidir. Sinif ixtiyari sinif adından sonra class açar sözündən istifadə etməklə müəyyən edilir. Sinif adında hərf və rəqəmlərin istənilən kombinasiyasından istifadə edilə bilər, lakin onlar rəqəmlə başlamamalıdır. Siniflə əlaqəli kod addan sonra görünən əyri mötərizələrə daxil edilməlidir. Sinif tərifi həmin sinfin hər yeni nümunəsinin hansı elementləri ehtiva edəcəyini təsvir edir. Əldə edilmiş məlumatlara əsasən, bir nümunədən istifadə edərək sinif tərifinin sintaksisinə baxaq:

Yuxarıdakı nümunədəki birinci sinif, hələ çox faydalı olmasa da, artıq tam hüquqlu bir sinifdir. Ancaq buna baxmayaraq, biz çox vacib bir şey etdik. Biz növü müəyyən etdik, yəni. skriptlərimizdə istifadə edə biləcəyimiz verilənlər kateqoriyası yaratdıq. Bunun əhəmiyyəti fəsildə daha sonra oxuduqca sizə aydın olacaq.

Obyektin yaradılması

Sinif obyektlərin yaradılması üçün şablon olduğundan, obyekt sinifdə müəyyən edilmiş şablona uyğun olaraq yaradılmış və strukturlaşdırılmış verilənlərdir. Obyektə növü sinif tərəfindən təyin olunan sinif nümunəsi də deyilir. Sinfin yeni nümunəsini yaratmaq üçün bizə yeni operator lazımdır. Sinif adı ilə birlikdə aşağıdakı kimi istifadə olunur:

Yeni operatordan sonra obyektin yaradılacağı sinfin adı göstərilir. Yeni operator bir sinif nümunəsini yaradır və yeni yaradılmış obyektə istinad qaytarır. Bu istinad müvafiq tipli dəyişəndə ​​saxlanılır. Bu kodun icrası nəticəsində birinci tipli iki obyekt yaradılacaq. Funksional baxımdan eyni olsalar da (yəni boş), $obj1 və $obj2 eyni sinifdən istifadə edərək yaradılmış, eyni tipli iki fərqli obyektdir.

Əgər hələ də çaşqınsınızsa, gəlin real həyatdakı bənzətmədən istifadə edək. Təsəvvür edin ki, sinif plastik avtomobillər hazırlamaq üçün istifadə olunan tökmə qəlibidir. Obyektlər avtomobildir. Yaradılan obyektlərin növü tökmə forması ilə müəyyən edilir. Maşınlar hər cəhətdən eyni görünür, amma yenə də fərqli obyektlərdir. Başqa sözlə, onlar eyni tipli fərqli nümunələrdir.

Birinci sinfə xassələri adlanan xüsusi məlumat sahələrini daxil etmək üçün dəyişdirərək bu obyektləri bir az daha maraqlı edək.

Xüsusiyyətlərin müəyyən edilməsi

Dəyişənlər sinifdə müəyyən edilə bilər. Sinifdə müəyyən edilən dəyişənlərə xassələr (və ya məlumat sahələri) deyilir. Onlar giriş nəzarətini xarakterizə edən qorunan, ictimai və ya özəl açar sözlərdən biri ilə müəyyən edilir. Bu açar sözlərə növbəti fəsildə ətraflı baxacağıq. İndi ictimai açar sözündən istifadə edərək bəzi xassələri təyin edək:

Gördüyünüz kimi, biz iki xassə təyin etdik, onların hər birinə dəyər təyin etdik. İndi birinci sinifdən istifadə edərək yaratdığımız hər hansı bir obyekt müəyyən edilmiş dəyərlərə malik iki xüsusiyyətə sahib olacaqdır.

Qeyd: xassə dəyərlərinin işə salınması literal (sabit dəyərlər) olmalıdır, sinifdə xassələri işə salmaq lazım deyil (dəyər göstərilməyibsə, defolt olaraq NULL olacaq).

Obyekt xassələrinə obyekti və xassə adını göstərərək " -> " simvollarından istifadə etməklə daxil olmaq olar. Obyektlərin xassələri ictimai olaraq təyin olunduğundan, biz onların dəyərlərini oxuya və həmçinin onlara yeni dəyərlər təyin edə bilərik və bununla da sinifdə müəyyən edilmiş ilkin dəyərləri əvəz edə bilərik:

küç; // obyekt xassəsinə yeni qiymət təyin etmək $obj->str = "yeni xətt"; əks-səda "
$obj->str"; ?>

Əslində, PHP-də bir sinifdə bütün xassələri elan etmək lazım deyil. Xüsusiyyətlər obyektə dinamik şəkildə əlavə edilə bilər:

newprop = "yeni əmlak"; echo $obj->newprop; ?>

Qeyd etmək lazımdır ki, obyektlərə xassələrin verilməsinin bu üsulu obyekt yönümlü proqramlaşdırmada pis forma hesab olunur və demək olar ki, istifadə edilmir.

Metodlarla işləmək

Metodlar sinif daxilində müəyyən edilmiş adi funksiyalardır, obyektlərə müxtəlif tapşırıqları yerinə yetirməyə imkan verir. Metod elanı adi funksiya tərifinə bənzəyir, ancaq ondan əvvəl qorunan, ictimai və ya özəl açar sözlərdən biri olması istisna olmaqla. Metod tərifində görünürlük açar sözünü buraxsanız, metod açıq şəkildə açıq elan ediləcək. Obyektin metodlarına obyekti və metod adını göstərərək " -> " simvollarından istifadə etməklə daxil olmaq olar. Metod çağırarkən, eynilə funksiyanı çağırarkən, mötərizələrdən istifadə etməlisiniz.

küç; ) ) $obj = yeni birinci(); // obyekt metodunun çağırılması $obj->getstr(); ?>

Birinci sinfə getstr() metodunu əlavə etdik. Diqqət yetirin ki, metodu təyin edərkən əhatə dairəsi açar sözündən istifadə etmədik. Bu o deməkdir ki, getstr() metodu ictimai tipdir və sinifdən kənarda çağırıla bilər.

Metodun tərifində biz xüsusi psevdo dəyişən $this istifadə etdik. O, sinif daxilində metodlara və ya xassələrə daxil olmaq üçün istifadə olunur və aşağıdakı sintaksisə malikdir:

$this->dəyişən və ya metod adı

Birinci sinif ( public $str = "bəzi mətn"; // sinifdə metod təyin edərkən, $this dəyişəninin getstr() dəyər funksiyası yoxdur ( echo $this->str; ) ) // $obj obyekti yaradın = əvvəlcə yeni (); // yaratdığımız obyektin xassə və metodu var // indi obyektin metodunda $this dəyişəninin // cari obyektə keçidi var, yəni $obj // yəni. əgər metodda $this-i obyektin cari nümunəsi ilə əvəz ediriksə $this->str; // bu sadə // cari obyektin xassəsinə giriş kimi görünəcək $obj->str;

Qeyd: $this heç nə təyin edilə bilməz. Unutmayın ki, $this həmişə cari obyektə aiddir.

Xüsusi üsul - konstruktor

Bir sinif müəyyən edilmiş xüsusi metoda malik ola bilər - konstruktor, hər dəfə sinfin (obyektin) yeni nümunəsi onu işə salmaq üçün yaradılanda çağırılır, məsələn, xassə dəyərlərinin təyin edilməsi. Konstruktor, hər hansı digər metod kimi, parametrlərə malik ola bilər. Metodu konstruktor kimi təyin etmək üçün onu __construct() adlandırmalısınız. Nəzərə alın ki, metodun adı iki alt xətt ilə başlamalıdır. Bunun necə işlədiyini görək:

ədəd1 = $num1; $this->num2 = $num2; ) // iki ədəd əlavə edən metod summa() funksiyası ( qaytarın $this->num1 + $this->num2; ) ) // obyekt yaradın və iki arqument ötürün $obj = əvvəlcə yeni(15, 35); // metodu çağırın və onun işinin nəticəsini dərhal göstərin echo $obj->summa(); ?>

Yeni operatordan istifadə edərək obyekt yaradıldıqda __construct metodu çağırılır. Mötərizədə göstərilən arqumentlər konstruktora ötürülür. Konstruktor metodu yaradılan obyektin müvafiq xassələrinə qiymətlər təyin etmək üçün $this psevdo dəyişəndən istifadə edir.

Qeyd: əgər konstruktorun parametrləri yoxdursa və sinfin yeni nümunələri yaradılarkən heç bir arqument ötürülmürsə, sinif adından sonra mötərizələr () buraxıla bilər: $obj = əvvəlcə yeni;

Metodlarda Arqument Tipinin Belirlenmesi

Varsayılan olaraq, metod istənilən növ arqumentləri qəbul edə bilər, lakin elə vaxtlar olur ki, siz metodun yalnız müəyyən bir sinfin nümunələrini arqument kimi qəbul edə biləcəyinə əmin olmaq istəyirsiniz. Qəbul edilən arqumentin növünü göstərmək üçün sadəcə olaraq metodun tərifində parametr adından əvvəl sinfin adını yerləşdirin:

getobj (yeni pişik()); // xəta olacaq: səhv tipli bir nümunə arqument kimi ötürüldü $kitty->getobj(new yanlış()); ?>

İndi siz getobj() metoduna arqument kimi yalnız cat tipli nümunələri ötürə bilərsiniz. Getobj() metodu sinif tipi kvalifikasiyasını ehtiva etdiyinə görə ona səhv tipli bir obyektin ötürülməsi xəta ilə nəticələnəcək.

Tip göstərişi sətirlər, nömrələr və s. kimi primitiv növlərin parametrlərini təyin etmək üçün istifadə edilə bilməz. Bunun üçün metodun gövdəsində is_string() kimi tip yoxlama funksiyalarından istifadə edilməlidir. Həmçinin, ötürülən arqumentin massiv olduğunu müəyyən etmək mümkündür:

my_arr = $biraz_arr; ) ) ?>

Demək lazım olan son şey odur ki, əgər metod parametri müəyyən bir siniflə müəyyən edilirsə, metoda heç bir obyekt ötürülmədiyi halda standart dəyəri təyin etməyə icazə verilir. Defolt dəyər kimi yalnız NULL istifadə edilə bilər:

Getobj funksiyası (cat $getCat = null) ( $this->someVar = $getCat; )

Əgər siz NULL əvəzinə hər hansı başqa standart dəyəri göstərsəniz, xəta baş verəcək.