mirror of
https://github.com/php/php-src.git
synced 2024-09-21 09:57:23 +00:00
d478ae73b1
Traits do not support interfaces, so we should not implement Stringable on them. Also check the __toString() return type in the same way other magic methods do, otherwise we would now miss the check in the trait case.
39 lines
648 B
PHP
39 lines
648 B
PHP
--TEST--
|
|
Bug #81582: Stringable not implicitly declared if __toString() came from a trait
|
|
--FILE--
|
|
<?php
|
|
|
|
trait T {
|
|
public function __toString(): string {
|
|
return "ok";
|
|
}
|
|
}
|
|
trait T2 {
|
|
use T;
|
|
}
|
|
|
|
class C {
|
|
use T;
|
|
}
|
|
class C2 {
|
|
use T2;
|
|
}
|
|
|
|
var_dump(new C instanceof Stringable);
|
|
var_dump(new C2 instanceof Stringable);
|
|
|
|
// The traits themselves should not implement Stringable -- traits cannot implement interfaces.
|
|
$rc = new ReflectionClass(T::class);
|
|
var_dump($rc->getInterfaceNames());
|
|
$rc = new ReflectionClass(T2::class);
|
|
var_dump($rc->getInterfaceNames());
|
|
|
|
?>
|
|
--EXPECT--
|
|
bool(true)
|
|
bool(true)
|
|
array(0) {
|
|
}
|
|
array(0) {
|
|
}
|