php - 特质; PHP 5.4 中的 parent 和 self 类型提示

标签 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

应该发生什么?我希望出现错误,指示 $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/

相关文章:

angular - 在 canActivate 中获取父路由参数

php - 如何在 CakePHP 2.6 中使用 IN(of MySQL) 一起删除多条记录

php - 使用 DOMDocument 通过 id 提取并打印 html 元素

php - 有没有办法让 PHP 子类继承属性(静态和实例)?

mysql - 如何使用 Laravel 的 Eloquent 实现单表继承?

swift - RealmSwift 在 Realm 计数发生变化时执行某些操作

javascript - 如何将事件跟踪添加到 Javascript 警报

php - 从资源服务器下载文件到浏览器(OAuth2)

c# - Fluent API EF 继承和映射

python - 将父变量调用到列表中