⊗ppOpTrMC 79 of 107 menu

Reševanje konfliktov metod lastnosti v OOP v PHP

Ker lahko en razred uporablja več lastnosti, se lahko pojavi težava, ko imata dve lastnosti metode z enakim imenom.

V tem primeru bo PHP izpisal usodno napako. Da popravimo situacijo, bomo morali konflikt imen eksplicitno razrešiti. Kako se to naredi - poglejmo v praksi.

Recimo, da imamo dve lastnosti z enako metodo method:

<?php trait Trait1 { private function method() { return 1; } } trait Trait2 { private function method() { return 2; } } ?>

Recimo, da imamo tudi razred Test, ki uporablja obe naš lastnosti. Če preprosto povežemo obe lastnosti z našim razredom, bo PHP izpisal napako, ker imata lastnosti metode, ki se ujemajo:

<?php // Ta koda bo sprožila napako! class Test { use Trait1, Trait2; // povežemo lastnosti } ?>

Razrešimo konflikt imen naših lastnosti. Za to obstaja poseben operator insteadof. S tem operatorjem bomo uporabili metodo method lastnosti Trait1 namesto podobne metode lastnosti Trait2:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } } new Test; ?>

Kot vidite, je sintaksa naslednja: najprej ime lastnosti, nato dva dvopičja, nato ime metode, nato naš operator insteadof in ime druge lastnosti.

Preverimo:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } public function __construct() { echo $this->method(); // izpiše 1, ker je to metoda prve lastnosti } } new Test; ?>

Torej, v našem razredu smo rekli, da če se uporablja metoda method, je treba jo vzeti iz prve lastnosti. Lahko je tudi obratno - vzemite metodo druge lastnosti:

<?php class Test { use Trait1, Trait2 { Trait2::method insteadof Trait1; } public function __construct() { echo $this->method(); // izpiše 2, ker je to metoda druge lastnosti } } new Test; ?>

V vsakem primeru, če navedemo, da uporabljamo metodo ene lastnosti, potem metoda druge lastnosti postane nedostopna. Lahko uporabimo tudi metodo druge lastnosti, tako da jo preimenujemo z ključno besedo as, takole:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; Trait2::method as method2; } public function __construct() { echo $this->method() + $this->method2(); // izpiše 3 } } new Test; ?>

Po želji lahko preimenujete tudi metodo prve lastnosti:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); // izpiše 3 } } new Test; ?>

Uporaba ključne besede as brez določanja glavne metode z insteadof ni dovoljena, to bo povzročilo napako:

<?php // Ta razred bo sprožil napako: class Test { use Trait1, Trait2 { Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); } } new Test; ?>

Naredite 3 lastnosti z imeni Trait1, Trait2 in Trait3. Naj bo v prvi lastnosti metoda method, ki vrne 1, v drugi lastnosti - metoda z enakim imenom, ki vrne 2, v tretji lastnosti pa - metoda z enakim imenom, ki vrne 3.

Naredite razred Test, ki uporablja vse tri ustvarjene lastnosti. Naredite v tem razredu metodo getSum, ki vrne vsoto rezultatov metod priključenih lastnosti.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni