Это структура, с которой я имею дело: < /p>
Код: Выделить всё
trait ContextTrait
{
public Subscriptions $subscription;
public function setSubscription(Subscriptions $value): self
{
$this->subscription = $value;
return $this;
}
}
abstract class Transaction
{
use ContextTrait;
protected ?int $paymentMethodId = null;
public function setPaymentMethodId(?int $value): self
{
$this->paymentMethodId = $value;
return $this;
}
}
class Invoice extends Transaction
{
protected ?string $dueDate = null;
public function setDueDate(?string $value): self
{
$this->dueDate = $value;
return $this;
}
}
< /code>
При инициализации класса$invoice = (new Invoice)
->setSubscription(...)
->setPaymentMethodId(...)
->setDueDate(...);
< /code>
У меня следующие проблемы: < /p>
[list]
[*] Intellisense (во время печати) работает только для функций -> setSubscription
[*] Нажатие F12 на -> setDudate DONN Это работает, он возвращает ошибку «не может найти объявление, чтобы перейти». . < /li>
< /ol>
Если я использую другой подход к созданию экземпляров (без цепочек): < /p>
Код: Выделить всё
$invoice = new Invoice;
$invoice->setSubscription(...);
$invoice->setPaymentMethodId(...);
$invoice->setDueDate(...);
< /code>
Все работает отлично. Есть ли способ исправить это? Что показывает мне в Phpstorm:
[b] с использованием метода цепочки [/b]: не показывает функцию -> setDudate
[/list]
< /p>
- не использует метод цепочки : она показывает функцию -> setDudate .
Подробнее здесь: https://stackoverflow.com/questions/794 ... iple-class