get_called_class non HACK lavoro con valuta-code
-
27-09-2019 - |
Domanda
Sto usando un hack ge_called_class
per consentire ritardo statica vincolante in PHP versione 5.2 (che si trova qui ).
Ho il seguente nel mio codice:
# db_record.php
$ac = "ForumThread";
$objects = $ac::find("all");
Questo non funziona in PHP 5.2, per qualche motivo, così ho fatto questo:
# db_record.php
$ac = "ForumThread";
eval("\$objects = {$ac}::find('all');");
Questo d'altra parte non funzionerà con la funzione get_called_class
. Ottengo un errore che la funzione file
non è in grado di leggere la sezione EVALED di codice.
Soluzione
Se stai usando eval, la soluzione è sbagliata.
Perché non il tuo lavoro non eval versione? Cosa c'è di sbagliato? Qual è il messaggio di errore completo e totale?
La versione user-suppled di esegue get_called_class
un backtrace e tenta di aprire il file del chiamante per determinare il nome della classe. La ragione per cui l'eval non riesce è perché il backtrace eval non fornisce un nome di file.
(Edit:.? Inoltre, che get_called_class
hack è molto un hack C'è una ragione per cui non è possibile utilizzare 5,3)
Hai provato a usare call_user_func ? call_user_func(array($ac, 'find'), 'all')
dovrebbe chiamare il metodo find
statico per il nome della classe contenuta nel $ac
con l''all'
paramater. Vedere anche il callback pseudo-tipo, e la "Tipo 2" esempio nella specifica