Wow. È un codice contorto. Esaminiamo a poco a poco:
Partiamo da questo:
fun("str1")
In realtà, questa è semplicemente una chiamata di funzione per una funzione denominata fun()
, passando un valore stringa come parametro.
Questa chiamata di funzione viene ripetuta tre volte nel codice, con stringhe diverse come argomenti. La funzione fun()
non è fornita nel codice di esempio, quindi non posso dire cosa fa, ma dato il contesto presumo che restituisca una stringa.
Il che ci porta al prossimo po 'possiamo esaminare:
${fun("str1")}
Il ${...}
sintassi PHP prende il contenuto delle parentesi graffe e riferimenti una variabile di quel nome.
Quindi, ad esempio, ${"myvar"}
equivale a dire $myvar
. Questo è chiamato un nome di variabile dinamico. Mentre ha i suoi usi, è un modo molto semplice per scrivere codice cattivo, che è difficile da leggere, capire o mantenere. Il tuo esempio rientra sicuramente in questa categoria.
Tuttavia, ora che capiamo la sintassi, è facile vedere che sta prendendo l'output di stringa della chiamata di funzione fun()
e trasformandolo in un nome di variabile.
espandendo ulteriormente, possiamo riscrivere il codice come segue per renderlo più chiaro:
$var1 = fun("str1");
$var2 = fun("str2");
$var3 = fun("str3");
if ($$var1 ($var2, $$var3))
Qui, $$var1
viene utilizzato come nome funzione, chiamata con $var2
e $$var3
come parametri.
Quindi in $var1
, abbiamo una chiamata di funzione che restituisce una stringa a cui viene fatto riferimento come nome di variabile, che viene chiamato come funzione.
Noi ancora non sappiamo cosa fun()
funzione ritorna, o se i nomi delle variabili che vengono generati dal suo ritorno sono validi, ma possiamo fare alcune ipotesi, come $var1
e $var2
avrebbe bisogno di essere popolato con i nomi delle funzioni valide a per fare in modo che la vostra linea di codice funzioni.
Ora abbiamo una comprensione dell'intera linea di codice, ma non ancora una visione chiara di ciò che sta cercando di ottenere (oltre ad essere eccessivamente 'intelligente' e ottuso).
Questo è molto molto codice scritto male. È deliberatamente oscuro, e inefficiente (cioè funzionerà lentamente).
Sembra per me un ***. Questo codice di produzione? – Sherlock
Significa che qualcuno sta provando a scrivere codice illeggibile. – Arjan
Sì, è un codice offuscato che devo capire. PHP è nuovo per me, ho provato a cercarlo su google, ma non ho ottenuto alcun risultato. – astrophonic