⊗ppOpTrMC 79 of 107 menu

Die oplos van treitmetode-konflikte in OOP in PHP

Aangesien een klas verskeie treite kan gebruik, kan ons 'n probleem teëkom wat ontstaan wanneer twee treite methode met dieselfde naam het.

In hierdie geval sal PHP 'n fatale fout gee. Om die situasie reg te stel, sal die konflik van name eksplisiet opgelos moet word. Hoe om dit te doen - kom ons kyk prakties.

Gestel ons het twee treite met dieselfde metode method:

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

Gestel ons het ook 'n klas Test wat albei van ons treite gebruik. As ons net albei treite by ons klas aansluit, sal PHP 'n fout gee, aangesien die treite ooreenstemmende metodes het:

<?php // Hierdie kode sal 'n fout gee! class Test { use Trait1, Trait2; // sluit treite aan } ?>

Kom ons los die konflik van name van ons treite op. Daar is 'n spesiale operator insteadof vir hierdie doel. Met hierdie operator sal ons die metode method van treit Trait1 gebruik in plaas van die soortgelyke metode van treit Trait2:

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

Soos jy kan sien, is die sintaksis soos volg: eers die naam van die treit, dan twee dubbelpunte, dan die naam van die metode, dan ons operator insteadof en die naam van die tweede treit.

Kom ons toets:

<?php class Test { use Trait1, Trait2 { Trait1::method insteadof Trait2; } public function __construct() { echo $this->method(); // sal 1 uitvoer, want dit is die metode van die eerste treit } } new Test; ?>

Dus, in ons klas het ons gesê dat as metode method gebruik word, moet dit van die eerste treit geneem word. Ons kan ook omgekeerd doen - die metode van die tweede treit neem:

<?php class Test { use Trait1, Trait2 { Trait2::method insteadof Trait1; } public function __construct() { echo $this->method(); // sal 2 uitvoer, want dit is die metode van die tweede treit } } new Test; ?>

In elk geval, as ons spesifiseer om die metode van een treit te gebruik, dan is die metode van die tweede treit nie meer beskikbaar nie. Ons kan ook die metode van die tweede treit gebruik deur dit hernoem met die sleutelwoord as, soos volg:

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

As jy wil, kan jy ook die metode van die eerste treit hernoem:

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

Die sleutelwoord as sonder die definisie van 'n hoofmetode deur insteadof te gebruik is nie moontlik nie, dit sal 'n fout gee:

<?php // Hierdie klas sal 'n fout gee: class Test { use Trait1, Trait2 { Trait1::method as method1; Trait2::method as method2; } public function __construct() { echo $this->method1() + $this->method2(); } } new Test; ?>

Maak 3 treite met die name Trait1, Trait2 en Trait3. Laat die eerste treit 'n metode method hê wat 1 teruggee, die tweede treit - 'n metode met dieselfde naam wat 2 teruggee, en die derde treit - 'n metode met dieselfde naam wat 3 teruggee.

Maak 'n klas Test wat al drie treite wat ons gemaak het, gebruik. Maak in hierdie klas 'n metode getSum wat die som van die resultate van die aangeslote treite se metodes teruggee.

Afrikaans
Azə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
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp