Проблема литья типов при создании интерфейса жидкости

Например, у нас есть следующий абстрактный класс

<?php
class AbstractClass {
public function setParam(): AbstractClass {}
}

class ConcreteClass extends AbstractClass {
public function test():void {}
}

Когда вы попробуете использовать это так

<?php
(new ConcreteClass())->setParam()->test();

Затем после setParam мы увидим только setParam метод, потому что setParam возвращается AbstractClass, Я пытался отметить setParam внутри AbsractClass с PHP-документом @return self, но это не работает.

Есть ли решения этой проблемы?

0

Решение

Для решения этой проблемы вы можете использовать @return static Атрибут PHP-doc

<?php

class A {
/** @return static */
public function methodA(): A;
}

class B {
/** @return static */
public function methodB(): B;
}

(new B())->methodB()->methodA()->methodB();

Все в этом примере будет выделено правильно.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]