Да. Этот синтаксис был введен в 5.3
Чтобы обойти <= 5.2, вы можете использовать <code>call_user_func:
call_user_func(array($className, $funcName), $arg1, $arg2, $arg3);
или call_user_func_array
:
call_user_func_array(array($className, $funcName), array($arg1, $arg2, $arg3));
Но с другой стороны, то, что вы пытаетесь сделать, на самом деле не имеет смысла ...
Почему это статическая функция? Ваш конструктор в implementation
все равно ожидает объект (это то, что ищет strategyInterface $strategy
). Передача строки не будет работать, так как строки не реализуют интерфейсы. Итак, я бы сделал интерфейс нестатичным, а затем сделал бы что-то вроде:
$strategy = new StrategyB();
$implementation = new Implementation($strategy);
Тогда в конструкторе:
$strFormat = $strategy->getFormatString();
Или, если вы действительно хотите, чтобы этот метод был статическим, вы можете сделать:
$strFormat = call_user_func(array(get_class($strategy), 'getFormatString'));
Да, и = & new
Синакс устарел (и в любом случае не делает то, что вы думаете, что он делает).