Req #63911 [Com]: Ignore conflicting trait methods originationg from identical sub traits

From: Date: Sun, 06 Jan 2013 02:36:02 +0000
Subject: Req #63911 [Com]: Ignore conflicting trait methods originationg from identical sub traits
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-175774@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=63911&edit=1

 ID:                 63911
 Comment by:         necktrox at gmail dot com
 Reported by:        bitluni at bitluni dot net
 Summary:            Ignore conflicting trait methods originationg from
                     identical sub traits
 Status:             Open
 Type:               Feature/Change Request
 Package:            Class/Object related
 Operating System:   debian
 PHP Version:        5.4.10
 Block user comment: N
 Private report:     N

 New Comment:

# from http://php.net/manual/de/language.oop5.traits.php

trait A {
    public function smallTalk() {
        echo 'a';
    }
    public function bigTalk() {
        echo 'A';
    }
}

trait B {
    public function smallTalk() {
        echo 'b';
    }
    public function bigTalk() {
        echo 'B';
    }
}

class Talker {
    use A, B {
        B::smallTalk insteadof A;
        A::bigTalk insteadof B;
    }
}


Previous Comments:
------------------------------------------------------------------------
[2013-01-05 18:39:11] bitluni at bitluni dot net

same issue for properties

------------------------------------------------------------------------
[2013-01-05 18:27:56] bitluni at bitluni dot net

Description:
------------
When extracting traits I would like to extract some general functions into sub traits and
'use' them in the traits where needed.
But when I compose a class out of multiple traits with sub traits I have to do obsolete statements
regardless if the colliding methods originate from same sub trait.

Just add a check if a method collides with itself

Test script:
---------------
trait A
{
    public function a(){}
}
trait B
{
    use A;
}
trait C
{
    use A;
}
class D
{
    use B, C;
}

Actual result:
--------------
Fatal error: Trait method a has not been applied, because there are collisions with other trait
methods on D in


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



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


Thread (21 messages)

« previous php.bugs (#175774) next »