Chiamata al metodo statico da un nome di stringa in PHP

Ho bisogno di chiamare un metodo statico di una classe, ma ho solo una classe, non un’istanza. Io sto facendo in questo modo.

$class = new "ModelName";
$items = $class::model()->findAll();

Funziona sul mio computer, ma quando mi sposto al server, si genera un unexpected T_PAAMAYIM_NEKUDOTAYIM, quindi penso che in realtà si aspetta modello una variabile invece di un metodo.

PS: Se aiuta, è Yii framework, quindi se c’è un altro modo per chiamare il find() funzioni, è ok per me.

Grazie in anticipo

InformationsquelleAutor Korcholis | 2012-07-10

 

One Reply
  1. 22

    Questo è perché il vostro server è in esecuzione una versione di PHP precedenti alla versione 5.3.0, in cui questa sintassi non è supportata.

    Dalla documentazione operatore di risoluzione di portata:

    PHP 5.3.0, è possibile fare riferimento alla classe utilizzando un
    variabile. Il valore della variabile non può essere una parola chiave (ad esempio, self, parent
    e statico).

    In ogni caso, è sempre possibile utilizzare call_user_func:

    $class = "ModelName"; //the "new" in your example was a typo, right?
    $items = call_user_func(array($class, 'model'))->findAll();
    • Sicuramente non è così sporca come la mia, una volta che posso, io accettare la tua risposta. A proposito, non era. Infatti, magicamente ha funzionato offline. E grazie per il tuo chiarimento, io so perché. Grazie!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *