[PHP-BUG] Bug #70472 [NEW]: prevent trait to be used when conflicts can't be resolved
[email protected] ("youwishspambot at example dot orgy")
| Newsgroups | php.standards |
|---|---|
| Message-ID | <[email protected]> |
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