2012-12-15 19 views
5

Sto avendo a che fare:Come chiamare una funzione su una variabile in PHP?

 
$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

voglio evitare che menzione ridondante del nome della variabile. Ho provato:

 
htmlspecialchars_decode(&$sourceElement['description']); 

e

 
call_user_func('htmlspecialchars_decode', &$sourceElement['description']); 

che non ha funzionato. È possibile in PHP? Chiama una funzione su una variabile?

risposta

2

Dipende sulla funzione. htmlspecialchars_decode() restituisce il risultato, non modifica la variabile originale. E non puoi farci nulla.

+0

Non vedo il motivo per cui una qualsiasi delle altre risposte sono meglio alternative che accettare semplicemente come funziona PHP. +1 per non pubblicare inutili "soluzioni alternative". –

3

La soluzione corretta dovrebbe includere quella menzione "ridondante" variabile. È molto più leggibile e molto meno confuso in questo modo.

$sourceElement['description'] = htmlspecialchars_decode($sourceElement['description']); 

Il tuo modo di pensare è bene però, si sta pensando a come accorciare il codice, come un vero programmatore pigro =)

7

È possibile creare la propria funzione wrapper che prende la variabile per riferimento:

function html_dec(&$str) {$str = htmlspecialchars_decode($str);} 

quindi chiamare:

html_dec($sourceElement['description']); 
+0

Ottima soluzione e informazioni, grazie. Ho accettato l'altro a causa delle informazioni aggiuntive sul comportamento nativo (* sigh * che è stato modificato in seguito). –

+0

... E poi creo nuove funzioni come questa per tutte le funzioni PHP che restituiscono valori, che voglio usare? In tal caso è probabilmente meglio trovare un'altra lingua ... –

2

maggior parte delle funzioni di PHP sono immutabili nel mature, cioè non modificano le argomentazioni che ci passi sopra. Questo ha alcuni vantaggi, uno dei quali è in grado di utilizzare il loro valore di ritorno in espressioni senza effetti collaterali.

Ecco un wrapper generico è possibile utilizzare per simulare il comportamento mutevole per qualsiasi funzione che prende un singolo argomento:

function applyFn(&$s, $fn) 
{ 
    return $s = $fn($s); 
} 

applyFn($sourceElement['description'], 'htmlspecialchars_decode'); 

applyFn($sourceElement['description'], 'trim'); // trim string 

situazione potrebbe essere diversa :)

+0

Bello! Ho solo paura di mettermi nei guai con le funzioni PHP che già prendono i puntatori ... ce ne sono affatto? Ok, domanda ridondante, immagino di poter controllare il manuale prima di usarlo su qualsiasi funzione. –

+1

Sì, dovrebbe essere usato con cura :) –

Problemi correlati