Sto usando php 5.2.6. Ho un modello di strategia e le strategie hanno un metodo statico. Nella classe che implementa effettivamente una delle strategie, ottiene il nome della classe di strategia da istanziare. Tuttavia, ho voluto chiamare uno dei metodi statici prima di esemplificazione, in questo modo:Impossibile chiamare il metodo statico dalla classe come nome di variabile?
$strNameOfStrategyClass::staticMethod();
ma dà 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)
Opererebbe in 5.3?
+1 per come affrontare il problema del suggerimento del tipo –
Avere una scoreggia del cervello oggi: PI non vuole passare un oggetto istanziato alla classe di implementazione, perché voglio istanziarlo su tutta la linea, dopo che la classe di implementazione ha creato alcuni dati che la strat egy ha bisogno. Penso che avrò comunque bisogno di 'call_user_func_array()' - grazie per il grande codice! – user151841
Si noti che questo tipo di opere funziona solo in 5.3. Puoi fare "$ foo :: staticMethod()" ma non puoi fare "$ this-> foo = new Whatever(); $ this-> foo :: staticMethod()". –