On Wed Mar 24 06:50 AM, Lukas Kahwe Smith wrote:
> Ahoi,
> 
> Thought it would be better to open up a new thread and also using the 
> term "horizontal reuse" in the subject so that we make it clearer that 
> there are actually two approaches. Here is the URL for Stefan's
> proposal:
> http://wiki.php.net/rfc/horizontalreuse
> 

One thing I feel is missing from the RFC is how is_a() and instanceof are
affected with traits or grafts.

From:
http://github.com/gron/php-src/blob/PHP_5_3-traits/Zend/tests/traits/languag
e009.phpt

class Foo {
    use C, A, B {
        B::foo instead A, C;
    }
}

$f = new Foo;

echo is_a($f, 'A'); ?
echo is_a($f, 'B'); ?

It's seem to me that a defining a 'trait' should be advertised strictly as
an 'advanced multiple inheritance technique' to reuse pieces of code and it
shouldn't be considered as an object (grafts proposal).

I don't like the "B::foo instead A, C" stuff though, so I agree with Lukas
and find that Grafts are more intuitive / easy to learn.

Personally, this syntax makes me happy but would keep the 'use' or 'with'
keyword:
http://wiki.php.net/rfc/nonbreakabletraits

trait A {
   protected function foo() {
     echo 'a';
   }
}

trait D {
  public function foo() { echo "d"; }
  function bar() { echo "d"; }
}

class Foo {
    use A;
    use D {
      function bar();
    }
}

$f = new Foo;

echo is_a($f, 'A'); // true
echo is_a($f, 'D'); // false, since we've done an explicit
selection/brackets: use D {}

This is mainly userland feedback


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to