Components injecting in PHP 5.4 with traits

I wrote this in a fever of creation, take a look:

On the second look – it’s already done for instance in CakePHP (Models behaviors, Controllers component). The only new thing here is the use of traits.

At first I thougt rails is better than PHP only because of environment (bundler, dev server, migrations, testing, gems). But for that it’s easy to catch up (say coposer for a good start). What I really miss is more dynamic nature of php itself.

So I guess I was chasing that shadow ;) Anyway – maybe someone could use this example for whatever reason. Traits gives you static Aspects (or horizontal inheritance if you prefer), this piece of code is an example of how this could be achieved dynamically.

Share Button

2 thoughts on “Components injecting in PHP 5.4 with traits

  1. Z tego co czytalem w 3.0 komponenty i behaviory beda przepisane z uzyciem traitsow :)

    Bedac troche ‘zielonym’ w traitsach, zastanawiam sie tylko co sie stanie jesli klasa SomeClass uzywa juz magicznej metody __call? Czy nastapi jakies przesloniecie czy obie metody __call zostana wywolane (z klasy oraz z traitu)?

  2. Dobra wiadomość. Przestałem jakiś czas temu śledzić postępy Cake’a. W pracy używamy Zend’a, a w prywatnych projektach robię w Rails’ach albo wcale :P

    Odpowiadając na Twoje pytanie: kolejność jest zdefiniowana. Metody w traits przykrywają te odziedziczone od klas bazowych, same są z kolei przykrywane przez metody zdefiniowane w danej klasie.

    Jednak wygląda na to, że to klasa ma być ‘trait-aware’, więc możesz użyć aliasów:

    class SomeTraitsHere {
    use MagicCallMe {
    MagicCallMe::__call as MCM_call;
    }

    public function __call($name, $args)
    {
    return array_merge(
    array($name => __CLASS__),
    $this->MCM_call($name, $args)
    );
    }
    }

Leave a Reply

Your email address will not be published. Required fields are marked *