php - Can't call static method from class as variable name? -
i'm using php 5.2.6. have strategy pattern, , strategies have static method. in class implements 1 of strategies, gets name of strategy class instantiate. however, wanted call 1 of static methods before instantiation, this:
$strnameofstrategyclass::staticmethod();   but gives 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 suhosin-patch 0.9.6.2 (cli) (built: aug  4 2010 03:25:57)   would work in 5.3?
yes. syntax introduced in 5.3
to workaround <= 5.2, can use call_user_func:
call_user_func(array($classname, $funcname), $arg1, $arg2, $arg3);   or call_user_func_array:
call_user_func_array(array($classname, $funcname), array($arg1, $arg2, $arg3));   but on note, you're trying doesn't make sense...
why have static function?  constructor in implementation expecting object anyway (that's strategyinterface $strategy looking for).  passing string won't work, since strings don't implement interfaces.  do, make interface non-static, , like:
$strategy = new strategyb(); $implementation = new implementation($strategy);   then, in constructor:
$strformat = $strategy->getformatstring();   or, if still want method static do:
$strformat = call_user_func(array(get_class($strategy), 'getformatstring'));   oh, , = & new synax deprecated (and doesn't think anyway).
Comments
Post a Comment