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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top