性状; PHP 5.4中的父和自我类型提示

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的预期功能吗?(我没有使用过支持他们的另一种语言)

Dan*_*ugg 5

好吧,我已经确认它实际上是我所希望的和预期的:

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)

那么,对所有人来说都是好消息.