虽然这个问题有点与语言无关(就支持 Traits 的 OOP 语言而言)我一直在修补 PHP 5.4a 的夜间构建,并遇到了一个奇怪的场景。我似乎无法再运行我的安装,但那是另一回事了。
给定以下代码段:
trait MyTrait
{
public function myMethod(self $object)
{
var_dump($object);
}
}
class MyClass
{
use MyTrait;
}
$myObject = new MyClass();
$myObject->myMethod('foobar'); // <-- here
应该发生什么?我希望出现错误,指示 $object
需要是 MyClass
的实例。
当 trait 方法被复制到一个 use
类中时,它们是否被逐字复制,以解决像这样的类继承引用?这是 Trait 的预期功能吗? (我没有使用过其他支持它们的语言)
最佳答案
好吧,我已经确认它确实如我所希望和预期的那样:
class MyClass
{
use MyTrait;
}
$myObject = new MyClass();
$myObject->myMethod($myObject); // ok
$myObject->myMethod('foobar'); // Catchable fatal error, argument must be instance etc
好消息。
关于php - 特质; PHP 5.4 中的 parent 和 self 类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856231/