⊗ppOpTrMC 79 of 107 menu

Kutatua Migogoro ya Mbinu za Traits katika OOP PHP

Kwa kuwa darasa moja linaweza kutumia traits nyingi, tunaweza kukabiliwa na tatizo linapotokea wakati traits mbili zina mbinu zenye majina sawa.

Katika hali hii, PHP itatoa hitilafu kubwa (fatal error). Ikusudie kurekebisha hali hiyo, itabidi utatue mgogoro wa majina kwa njia wazi. Jinsi hii inavyofanyika tutaona kwa vitendo.

Wacha tuwe na traits mbili zilizo na mbinu sawa method:

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

Wacha tuwe pia na darasa Test, linalotumia traits zetu zote mbili. Ikiwa tu utaunganisha traits zote mbili kwenye darasa letu, basi PHP itatoa hitilafu, kwa sababu traits zina mbinu zinazolingana:

<?php // Msimbo huu utatoa hitilafu! class Test { use Trait1, Trait2; // tunaunganisha traits } ?>

Wacha tutatue mgogoro wa majina ya traits zetu. Kwa ajili hii kuna kiendeshzi maalum insteadof. Kwa kutumia kiendeshzi hiki tutatumia mbinu method ya trait Trait1 badala ya mbinu sawa ya trait Trait2:

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

Kama unavyoona, sintaksia hapa ni ifuatayo: kwanza jina la trait, kisha koloni mbili, kisha jina la mbinu, kisha kiendeshzi chetu insteadof na jina la trait ya pili.

Wacha tuangalie:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } public function __construct() { echo $this->method(); // itatoa 1, kwani hii ni mbinu ya trait ya kwanza } } new Test; ?>

Kwa hivyo, katika darasa letu tulisema kuwa ikiwa mtumiaji anatumia mbinu method, basi inapaswa kuchukuliwa kutoka kwa trait ya kwanza. Vinginevyo pia inawezekana - kuchukua mbinu ya trait ya pili:

<?php class Test { use Trait1, Trait2 { Trait2::method insteadof Trait1; } public function __construct() { echo $this->method(); // itatoa 2, kwani hii ni mbinu ya trait ya pili } } new Test; ?>

Hata hivyo, ikiwa tunabainisha kutumia mbinu ya trait moja, basi mbinu ya trait ya pili inakuwa haipatikani. Inawezekana kutumia na mbinu ya trait ya pili, ukibadilisha jina lake kupitia neno kuu as, kama hivi:

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

Kwa hiari yako unaweza kubadilisha jina la mbinu ya kwanza ya trait:

<?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(); // itatoa 3 } } new Test; ?>

Kutumia neno kuu as bila kufafanua mbinu kuu kupitia insteadof hakuwezekani, hii itatoa hitilafu:

<?php // Darasa hili litatoa hitilafu: class Test { use Trait1, Trait2 { Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); } } new Test; ?>

Tengeneza traits 3 zenye majina Trait1, Trait2 na Trait3. Acha katika trait ya kwanza iwe na mbinu method, inayorudisha 1, katika trait ya pili - mbinu yenye jina sawa, inayorudisha 2, na katika trait ya tatu - mbinu yenye jina sawa, inayorudisha 3.

Tengeneza darasa Test, lenye kutumia traits zote tatu tulizozitengeneza. Tengeneza ndani ya darasa hili mbinu getSum, inayorudisha jumla ya matokeo ya mbinu za traits zilizounganishwa.

Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa