Edit report at https://bugs.php.net/bug.php?id=62069&edit=1

 ID:                 62069
 Comment by:         g...@php.net
 Reported by:        larue...@php.net
 Summary:            binding wrong traits if they have same name methods
 Status:             Assigned
 Type:               Bug
 Package:            Scripting Engine problem
 PHP Version:        5.4.3
 Assigned To:        dmitry
 Block user comment: N
 Private report:     N

 New Comment:

Hi Laruence:

The first example is a bug, indeed.

Why is the second example a bug?
To me it looks like the perfectly intended traits semantics, no?


Previous Comments:
------------------------------------------------------------------------
[2012-05-19 06:44:30] larue...@php.net

and if the class have no own func method defination, the result will be:
<?php
trait T1 {
    public function func() {
        echo "From T1\n";
    }
}

trait T2 {
    public function func() {
        echo "From T2\n";
    }
}

class Bar {
    use T1 {
        func as f1;
    }
    use T2 {
        func as f2;
    }
}

PHP Fatal error:  Trait method func has not been applied, because there are 
collisions with other trait methods on Bar in /tmp/1.php on line 21

this should also be a bug. thanks :)

------------------------------------------------------------------------
[2012-05-19 06:40:54] larue...@php.net

Hi, dmitry, could you please look at this? thanks

the problem occurrs in zend_traits_merge_functions. in that function, it will 
unique the trait methods name. 

the fix will be a big change, since we should re-implemention the whole merge 
functions mechanism, maybe add the tarit name as a suffix to method name.

thanks

------------------------------------------------------------------------
[2012-05-19 06:30:40] larue...@php.net

Description:
------------
if a function binding more than two traits and they have same method name, the 
result is wrong.

Test script:
---------------
<?php
trait T1 {
    public function func() {
        echo "From T1\n";
    }
}

trait T2 {
    public function func() {
        echo "From T2\n";
    }
}

class Bar {
    public function func() {
        echo "From Bar\n";
    }
    use T1 {
        func as f1;
    }
    use T2 {
        func as f2;
    }
}

$b = new Bar();
$b->f2();

Expected result:
----------------
>From T2

Actual result:
--------------
>From T1


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=62069&edit=1

Reply via email to