如何在 parent class 方法中克隆 child class 实例

How to clone a child class instance within a parent class method

我有一个childclass。我的 parent class 有一个实例方法可以克隆 $this 并流畅地 returns 克隆。我想将该实例方法与我的 child class 实例一起使用,但我在 IDE (PhpStorm) 中得到提示,返回值是 parent class,而不是我预期的 child class:

<?php
class myParentClass
{
    public function doAThing()
    {
        $clone = clone $this;
        // ... doing things
        return $clone;
    }
}

class myChildClass extends myParentClass {
    public function doTricks()
    {
        // ... do some tricks
    }
}

$myChild = new myChildClass();
$myChild = $myChild->doAThing(); // returns myParentClass instance, not myChildClass
$myChild->doTricks(); // Error, myParentClass doesn't have a doTricks() method

如何让 myChildClass::doAThing() 传回 myChildClass 实例?

您可以添加以下 PHPDoc 块,PhpStorm 将知道实际返回的对象

class myParentClass
{
    /**
     * @return static
     */
    public function doAThing()
    {
        $clone = clone $this;
        // ... doing things
        return $clone;
    }
}