Haszprus

Hello World of Traits

©   Haszprus   |   fejlesztés howto php

Eddig nem használtam a Traits feature-ét a PHP-nek, megnéztem most vele egy Hello Worldöt. Semmi extra.

<?php

trait Hello {
    function sayHello() {
        echo "Hello";
    }
}

trait World {
    function sayWorld() {
        echo "World";
    }
    function sayHello() {
        echo "Szia";
    }
}

trait HelloWorld {
    use Hello, World {
        World::sayHello insteadof Hello;
    }
    function sayHelloWorld () {
        $this->sayHello();
        echo " ";
        $this->sayWorld();
        echo "!";
    }
}

class Main {
    use HelloWorld;
}

$m = new Main();
$m->sayHelloWorld(); // Szia World!

RSS: hozzászólások ehhez a bejegyzéshez 6 hozzászólás

Szólj hozzá Te is!


Egy igazi forradalmár vagy, HelloWorld-ben sziával köszönsz!

dankoi, hát ugye alapvetően olyasmiről van szó mintha többszörös öröklődés lenne, de eltérésekkel. A PHP ugye nem többszörösen örököltető nyelv. Egy érdekességet találtam egyébként a traitekben, hogy a traitekben definiált metódusok elérik a traitet használó osztály private metódusait/változóit is, ezt ugye semmilyen öröklődéssel nem teheted meg, más kérdés, hogy ez bennem momentán felveti hogy akkor kéne egy még privátabb szint, amit a traitek sem érnek el.

A traitekre szerintem az egyik találó megfogalmazás hogy nyelv által támogatott megoldás a copy-paste kiváltására.

A helyzet ugyanakkor az hogy nem dolgoztam komolyabban többszörös öröklődést támogató nyelvvel, úgyhogy lehet hogy nem a legautentikusabb személy vagyok a kérdésben.

Valójában ha nem a többszörös öröklődéssel akarjuk összevetni, akkor pedig szvsz elég nyilvánvaló a haszna az egyszeres öröklődéshez képest: legyen mondjuk az alaposztályaid neve Colorable és Resizable, ha szeretnél egy ColorableResizable osztályt azt egyszeres öröklődéssel nem teheted meg, traitekkel viszont igen.

Ketszer olvastam el a kodot, es nem birtam volna megmondani mit ir ki. Ez a traits funkcio valami code obfuscation contesthez keszult?

NeoXon, Ahahah igazán jót rohogtem szerintem nem vészes amúgy, és mostanában eléggé divatos is, esetleg mix-inkent hallhattál róla egyéb nyelvből de amúgy sztem nincs baj vele, bár éles környezetben még nem használtam de momentán nekem tetszik.

Én használok nap mint nap a cégem által (általunk) készített osztály kezelő lib-et JavaScript-ben, ami ugyancsak ad Trait funkciót. Mely szintén a többszörös öröklődést hivatott ellátni… Bár nem teljesen az Sajnos ő is teljesen áthágja a mit láthat, mint nem aranyszabályokat, és csak a fejlesztőn múlik, hogy jól használja.

Egy majdnem pontos idézet, abból az időből, mikor Dani kollégám megcsinálta ezt a szolgáltatást: Egy példát nézve az adott osztályaink a SZUPERHŐSÖK osztályból származnak le, de nem mindegyik szuperhős tud REPÜLNI, csak néhány. Na ők ezt a képességüket trait-ként kapják meg
Hozzászólásod:


Nem vagy bejelentkezve, de...

A)
hozzászólhatsz regisztrálatlanul...

B)
ha regisztrálva vagy, bejelentkezhetsz...