oop — вызывает статический метод класса переменной из свойства чужого класса в переполнении стека

Я хочу вызвать статический метод из класса variabe в PHP. Как уже несколько раз указывалось на SO и поскольку это обычная практика, следующее работает, как и ожидалось:

class Foo {
public function compile($strClass) {
$strClass::find(); // this works
}
}

Тем не менее мне приходится вызывать разные методы find из $ strClass из разных методов класса Foo. Вот почему я хочу хранить $ strClass в $ this-> strClass. К сожалению, это не работает:

class Foo {

protected $strClass;

public function __construct($strClass)
{
$this->strClass = $strClass;
}

public function compile($strClass) {
$this->strClass::find(); // this does not work
}

}

Любая идея или намек на то, как решить эту проблему?

Обновить:

Как указано в комментариях, это может быть решение использовать call_user_func следующим образом:

call_user_func(array($this->strClass, 'find'), $strParam);

В любом случае, это делает завершение кода в PHPstorm невозможным. Есть намеки на это? Может быть, с использованием аннотации кода?

-1

Решение

Вы можете изменить свой метод компиляции на это:

public function compile($strClass) {
call_user_func(array($this->strClass, 'find'));
}
1

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

Этот класс дизайна имеет недостатки. Я бы попытался полностью избавиться от статических методов, но вот решение, которое использует тот факт, что вы можете вызывать статические методы на объекты:

class Foo {

protected $strClass;

public function __construct($strClass)
{
$this->strClass = new $strClass;
}

public function compile($strClass) {
$this->strClass::find();
}

}

ОБНОВИТЬ: не берите в голову, это синтаксическая ошибка во всех текущих версиях PHP, на самом деле вы должны сделать это так:

$strClass = $this->strClass;
$strClass::find();

И это работает с вашим исходным кодом, где $this->strClass это строка

0

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