Dan*_*ugg 4 php inheritance parent self traits
虽然这个问题在某种程度上与语言无关(对于支持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
Run Code Online (Sandbox Code Playgroud)
应该怎么办?我希望有一个错误,表明$object
需要成为一个实例MyClass
.
当trait方法被复制到use
-ing类中时,它们是逐字复制的,以解决类似这样的类继承引用吗?这是Trait的预期功能吗?(我没有使用过支持他们的另一种语言)
好吧,我已经确认它实际上是我所希望的和预期的:
class MyClass
{
use MyTrait;
}
$myObject = new MyClass();
$myObject->myMethod($myObject); // ok
$myObject->myMethod('foobar'); // Catchable fatal error, argument must be instance etc
Run Code Online (Sandbox Code Playgroud)
那么,对所有人来说都是好消息.