Bug #70472 [NEW]: prevent trait to be used when conflicts can't be resolved

From: Date: Thu, 10 Sep 2015 19:34:33 +0000
Subject: Bug #70472 [NEW]: prevent trait to be used when conflicts can't be resolved
Groups: php.standards 
Request: Send a blank email to standards-+get-854@lists.php.net to get a copy of this message
From:             youwishspambot at example dot orgy
Operating system: any
PHP version:      7.0.0RC2
Package:          PHP Language Specification
Bug Type:         Bug
Bug description:prevent trait to be used when conflicts can't be resolved

Description:
------------
Example 1:

<?php

class A{}
class B{}

trait X{
    abstract function test(B $b);
    function doSomething(){
        // can only be B. nothing should be allowed to change the
signature of test(B)
        $this->test(new B);
    }
}

interface Contract{
    function test(A $a);
}

class Implementation implements Contract{
    use X; // incompatible, but compiles
    function test(A $a){}
}

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

Example 2:

<?php

class A{}
class B{}

trait X{
    function tryA(A $a){
        $this->test($a);
    }
    function test(A $a){} // can't solve signatures incompatibility...
}

trait Y{
    function tryB(B $b){
        $this->test($b);
    }
    function test(B $b){} // ...when arguments are different
}


class Example{
    use X, Y{
        X::test insteadof Y; // this doesn't actually solve anything
    }
}

class A{}
class B{}

$x = new Example;
$x->tryA(new A);
$x->tryB(new B);

(insteadof can only work if resolution happens between two identical
signatures)


-- 
Edit bug report at https://bugs.php.net/bug.php?id=70472&edit=1
-- 
Try a snapshot (PHP 5.4):   https://bugs.php.net/fix.php?id=70472&r=trysnapshot54
Try a snapshot (PHP 5.5):   https://bugs.php.net/fix.php?id=70472&r=trysnapshot55
Try a snapshot (trunk):     https://bugs.php.net/fix.php?id=70472&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=70472&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=70472&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=70472&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=70472&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=70472&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=70472&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=70472&r=notwrong
Not enough info:            https://bugs.php.net/fix.php?id=70472&r=notenoughinfo
Submitted twice:            https://bugs.php.net/fix.php?id=70472&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=70472&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=70472&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=70472&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=70472&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=70472&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=70472&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=70472&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=70472&r=mysqlcfg



Thread (1 message)

  • youwishspambot at example dot orgy
« previous php.standards (#854) next »