Learning vonások

Szabad fordítás az angol cikkeket Coder a Code oldalon.

PHP megszerzi az összes új funkciót és fokozatosan korrigálására múltbeli hibákat. A PHP 5.4 egyik legfontosabb újítás a vonások (vonások). PHP mindenkor támogatott csak egyetlen öröksége az osztályok, azaz Minden osztálynak csak az egyik szülő, ami a gyakorlatban néha rossz a szervezet kódot, és ahhoz vezethet, hogy átfedések.

Nyelvek, mint a C ++ vagy a Python megoldani ezt a problémát, amely lehetővé teszi az öröklést több osztály (multinasledovaniya). Ruby használ ez a szennyeződés (mixinek). Függetlenül attól, hogy a problémát, az egyik technika ugyanaz. Vonások másik módja, hogy megoldja ezt a problémát, és arra használják, például nyelvek, mint a Perl, Scala.

PHP, és többszörös öröklődés

Ennek fő oka, hogy a PHP nebylo többszörös öröklődés a „probléma rombusz” (gyémánt probléma), amely akkor következik be egy bizonyos multinasledovani. „A probléma az, rombusz” - ez a kétértelműség, amely akkor keletkezik, ha multinasledovaniii.

Itt egy példa. B és C osztályú öröklik a osztályú, és D osztályú örökli odnovmeremenno B és C osztályú olyan eljárás, amely felülbírálja a mind a B és a C osztályba, de ez nincs felülírva az osztályban D. Milyen módszer öröklik a D osztályú?

Tegyük fel, hogy a PHP többszörös öröklés (valójában nem), akkor a „probléma a rombusz” a mi példát, lesz valami, mint ez: osztály nem tudja, melyik módszert Roar () örökli.

Ez valójában a probléma multinasledovaniya és PHP, szerencsére (vagy talán fordítva), csak támogat egyetlen öröklési és nem hozhat létre egy ilyen hiba. De a PHP 5.4 verzió, még mindig képes lesz végre ilyen funkcionalitást.

Jellemzők vonások

Vonások - mechanizmus kód újrafelhasználásának egyetlen öröklési nyelvek (például PHP). Vonások enyhíti a fejlesztő néhány egyszerű öröklődési korlátok, amely lehetővé teszi a használatát egy sor független módszerek a különböző osztályokban. php.net.

A legegyszerűbb módja annak, hogy megértsük Személyiségjegyek: gondolunk rájuk, mint az interfészeket a végrehajtási módszereket. Mint már mondottuk, ez része volt egy öröklési OOP PHP sok éven át, és sok fejlesztő voltak csalódottak, hogy része, amikor próbál írni a tiszta kódot egy nagy projekt.

A vonások tudjuk használni a funkciót más osztályok (kb. Trans. Tény, hogy nem osztály, nevezetesen jellemzők), és ezért nem örökli azokat. Úgy hangzik, mint multinasledovanie, de valójában vonások, mint a „horizontális újrafelhasználásának kód”, hogy míg öröklés „vertikális újrafelhasználásának kódot.”

Ahogy már említettük, a jellemzők, mint az absztrakt osztály, például, nem lehet létrehozni egy objektumot közvetlenül a tulajdonság. Nézzünk egy példát:

Ha tudnál csinálni ugyanazt egyszeres öröklődést létrehozásával Cat osztály, amely örökli a Animal, majd öröklik Tiger Cat, akkor próbálja meg a következőket:

Cool, nem igaz? Próbáld meg az azonos nélkül multinasledovaniya.

A legjobb vonás - ez strukturáló. Macska és BigCat sok közös (azonos macska, de nagyobb), de nagyon kényelmes, hogy ossza módszerek alkalmazása a különböző tulajdonság és használja őket, ha szükséges. Sőt, mi lehetne még tovább mennek: