Domanda Come posso chiamare un metodo statico da una classe se tutto quello che ho è una stringa del nome della classe?


Come potrei ottenere qualcosa di simile a funzionare?

$class_name = 'ClassPeer';
$class_name::doSomething();

31
2018-06-15 19:41


origine


risposte:


A seconda della versione di PHP:

call_user_func(array($class_name, 'doSomething'));
call_user_func($class_name .'::doSomething'); // >5.2.3

52
2018-06-15 19:46



Per sfruttare la potenza del completamento automatico IDE e il rilevamento degli errori, utilizzare questo:

$class_name = 'ClassPeer';

$r = new \ReflectionClass($class_name );

// @param ClassPeer $instance

$instance =  $r->newInstanceWithoutConstructor();

//$class_name->doSomething();
$instance->doSomething();

Fondamentalmente qui stiamo chiamando il metodo statico su un'istanza della classe.


11
2017-12-27 17:38



Uso call_user_func. Leggi anche su PHP callbacks.

call_user_func(array($class_name, 'doSomething'), $arguments);

8
2018-06-15 19:46



Reflection (PHP 5 lo supporta) è come lo faresti. Leggi quella pagina e dovresti essere in grado di capire come richiamare la funzione in questo modo.

$func = new ReflectionFunction('somefunction');
$func->invoke();

Link alla documentazione


4
2018-06-15 19:46



Dopo aver quasi perso la soluzione più semplice di VolkerK, ho deciso di estenderlo e inserirlo in un post. Questo è come chiamare i membri statici nella classe di istanza

// calling class static method
$className = get_class($this);
$result = $className::caluclate($arg1, $arg2);

// using class static member
foreach ($className::$fields as $field) {
  :
}

0
2018-02-07 20:12