PHP

PHP: clone $this が書かれた親クラスを継承したとき、小クラスの振る舞いはどうなるのか?

More than 1 year has passed since last update.

clone $thisが書かれた親クラスを継承したとき、小クラスの振る舞いはどうなるのか?」 疑問だったので調べた。

このような継承関係のあるクラスで、

class ParentClass {}

class ChildClass extends ParentClass {}

親クラスにclone $thisを書いたとき、

class ParentClass

{
public function copy(): self
{
return clone $this;
}
}

次のコードで、$objParentClassになるのか、それともChildClassになるのか?

$child = new ChildClass(); // 小クラス

$obj = $child->copy(); // 親クラスの実装 clone $this が呼ばれる
// $objはParentClass? ChildClass?

正解は、ChildClass

assert(get_class($obj) === 'ChildClass');