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

 ID:                 60217
 Updated by:         g...@php.net
 Reported by:        maus dot christian at googlemail dot com
 Summary:            imposing requirements in traits
-Status:             Assigned
+Status:             Closed
 Type:               Bug
 Package:            Class/Object related
 Operating System:   Ubuntu Linux 11.10
 PHP Version:        5.4.0beta2
 Assigned To:        gron
 Block user comment: N
 Private report:     N

 New Comment:

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.

 For Windows:

http://windows.php.net/snapshots/
 
Thank you for the report, and for helping us make PHP better.

Fixed with SVN rev. 318793.

I also added the missing tests that ensure compatibility of abstract method 
definitions.


Previous Comments:
------------------------------------------------------------------------
[2011-11-05 01:46:34] g...@php.net

Automatic comment from SVN on behalf of gron
Revision: http://svn.php.net/viewvc/?view=revision&revision=318793
Log: Fixed Bug #60217 (Requiring the same method from different traits)
- also added test to check for inconsistent abstract method definitions, they 
need to be compatible

------------------------------------------------------------------------
[2011-11-04 13:12:06] maus dot christian at googlemail dot com

Description:
------------
Using multiple traits that depend on the same requirement using an abstract 
method fails with a fatal error.
I tried using trait composition in order to move the requirement into a common 
trait, but this does not work either.



Test script:
---------------
trait DoubleAmount {
    public function doubleAmount() {
        return $this->getAmount() * 2;
    }
    public abstract function getAmount();
}
trait TripleAmount {
    public function tripleAmount() {
        return $this->getAmount() * 3;
    }
    public abstract function getAmount();
}
class model {
    use DoubleAmount, TripleAmount;

    public function getAmount() {
        return 23;
    }
}

Actual result:
--------------
PHP Fatal error:  Can't inherit abstract function TripleAmount::getAmount() 
(previously declared abstract in DoubleAmount) in 
/home/maus/projects/traitstest/trait_abstract.php on line 30


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



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

Reply via email to