Я использую php 5.2.6. У меня есть шаблон стратегии, и стратегии имеют статический метод. В классе, который фактически реализует одну из стратегий, он получает имя класса стратегии для создания экземпляра. Тем не менее, я хотел бы назвать один из статических методов, прежде чем конкретизации, например:Нельзя вызвать статический метод из класса как имя переменной?
$strNameOfStrategyClass::staticMethod();
но это дает T_PAAMAYIM_NEKUDOTAYIM
.
$> cat test.php
<?
interface strategyInterface {
public function execute();
public function getLog();
public static function getFormatString();
}
class strategyA implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class strategyB implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class implementation {
public function __construct(strategyInterface $strategy) {
$strFormat = $strategy::getFormatString();
}
}
$objImplementation = & new implementation("strategyB") ;
$> php test.php
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /var/www/test.php on line 24
$> php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57)
Будет ли это работать в 5.3?
+1 для того, как справиться с проблемой типа намекания –
Имея мозговой пердит сегодня: PI не хочет передавать экземпляр-объект для класса реализации, потому что я хочу создать его на линии, после того, как класс реализации создал некоторые данные, которые страт потребности. Я думаю, мне понадобится 'call_user_func_array()' anyway - спасибо за отличный код! – user151841
Обратите внимание, что это всего лишь работа в 5.3. Вы можете сделать «$ foo :: staticMethod()», но вы не можете сделать «$ this-> foo = new Whatever(); $ this-> foo :: staticMethod()». – 2012-12-21 23:37:27