⊗ppOpTrMC 79 of 107 menu

Халли низоъи усулҳои трейтҳо дар ООП дар PHP

Азбаски як синф метавонад якчанд трейтро истифода барад, пас мӯъмине мумкин аст, ки вақте рӯй медиҳад, ки ду трейт усулҳои ҳамном доранд.

Дар ин сурат PHP хатогии фаталӣ медиҳад. Барои ислоҳ кардани вазъият, бояд низоъи номҳоро ба таври ошкоро ҳал кард. Чӣ тавр ин анҷом дода мешавад - амалан мебинем.

Бигзор мо ду трейт бо усули якхелаи method дошта бошем:

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

Бигзор мо инчунин синфи Test дошта бошем, ки ҳарду трейти моро истифода мебарад. Агар танҳо ҳарду трейтро ба синфи мо пайваст кунем, пас PHP хатогӣ медиҳад, зеро трейтҳо усулҳои мувофиқ доранд:

<?php // Ин рамз хатогӣ медиҳад! class Test { use Trait1, Trait2; // трейтҳоро пайваст мекунем } ?>

Биёед низоъи номҳои трейтҳои моро ҳал кунем. Барои ин оператори махсуси insteadof вуҷуд дорад. Бо ёрии ин оператор усули method-и трейти Trait1-ро ба ҷои усули ҳамон трейти Trait2 истифода мебарем:

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

Чунон ки шумо мебинед, дар ин ҷо синтаксис чунинанд: аввал номи трейт, сипас ду нуқтаи дубора, сипас номи усул, сипас оператори моро insteadof ва номи трейти дуюм.

Биёед санҷем:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } public function __construct() { echo $this->method(); // 1-ро чоп мекунад, зеро ин усули трейти аввал аст } } new Test; ?>

Пас, дар синфи мо мо гуфтем, ки агар усули method истифода шавад, пас бояд онро аз трейти аввал гирифт. Метавонад баръакс бошад - усули трейти дуюмро гирифт:

<?php class Test { use Trait1, Trait2 { Trait2::method insteadof Trait1; } public function __construct() { echo $this->method(); // 2-ро чоп мекунад, зеро ин усули трейти дуюм аст } } new Test; ?>

Дар ҳар сурат, агар мо истифода бурдани усули яке аз трейтро ишора кунем, пас усули трейти дуюм дастрас намешавад. Метавонад усули трейти дуюмро низ истифода бурд, бо табдил додани номаш тавассути калимаи калиди as, ба ин тариқ:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; Trait2::method as method2; } public function __construct() { echo $this->method() + $this->method2(); // 3-ро чоп мекунад } } new Test; ?>

Агар хоҳиш кунед, метавонед номи усули трейти аввалро низ табдил диҳед:

<?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(); // 3-ро чоп мекунад } } new Test; ?>

Истифодаи калимаи калидии as бе муайян кардани усули асосӣ тавассути insteadof мумкин нест, ин хатогӣ медиҳад:

<?php // Ин синф хатогӣ медиҳад: class Test { use Trait1, Trait2 { Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); } } new Test; ?>

3 трейт бо номҳои Trait1, Trait2 ва Trait3 созед. Бигзор дар трейти аввал усули method бошад, ки 1-ро бармегардонад, дар трейти дуюм - усули ҳамонном, ки 2-ро бармегардонад, ва дар трейти сеюм - усули ҳамонном, ки 3-ро бармегардонад.

Синфи Test созед, ки ҳар се трейти сохтаи моро истифода мебарад. Дар ин синф усули getSum созед, ки ҳосили ҷамъи натиҷаҳои усулҳои трейтҳои пайвастшударо бармегардонад.

Тоҷикӣ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мо барои коркарди сомона, таҳлил ва шахсӣ кардан аз cookie истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан