Assegnare un codice php ad una variabile, possibile?

PHPMan

Nuovo Utente
2 Feb 2015
17
2
0
Mi pongo da tempo una domanda, ma è possibile assegnare del codice php ad una variabile?


Tipo:

PHP:
$x = true;
$y = 2;

$a = "if($x) { echo $y; }";

echo $a;


E con questo codice verrebbe fuori 2 stampato sulla pagina web ma....non è possibile in questo modo ovviamente lol

Mi chiedo quindi se c'è qualche modo per fare una cosa di questo tipo

Grazie delle risposte!
 
Dal quel che so non è possibile , però puoi salvare in una variabile una funzione, quindi crea una funzione con quelle istruzioni.
 
Se stai pensando di salvare del codice PHP come stringa da eseguire per risolvere un problema, nel 99% dei casi esiste una soluzione migliore per gestire la questione.

Per conoscenza, ciò che hai scritto nel post è possibile tramite l'uso del costrutto eval()
PHP:
eval($a);

L'uso di questo costrutto è però altamente sconsigliato, ti riporto quel che dice la documentazione di php in proposito:
Caution
The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged. If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.

Esistono anche altri modi per ottenere lo stesso risultato, ma eval risulta essere comunque quello più performante.
 
Sicuramente si può risolvere, ma la tua richiesta è ambigua. Bisognerebbe capire perché vorresti poter assegnare un codice php ad una variabile, e se realmente ti serve farlo.

Certamente puoi farlo con l'uso di eval() (che in genere è altamente sconsigliato), come ti è stato chiaramente indicato.

In alternativa, a seconda delle tue reali esigenze, potresti risolvere in altri differenti modi.
In sostanza, prendendo il tuo esempio, se ti serve stampare il valore di $y solo quando $x è true, puoi usare direttamente quel codice senza doverlo associare ad una variabile:
PHP:
$x = true;
$y = 2;
if($x) { echo $y; };

Oppure se proprio vuoi attribuire il valore alla variabile $a solo a quella condizione, puoi farlo in questo modo:
PHP:
$x = true;
$y = 2;
if($x) $a = $y;

echo $a;

In questo caso però, se la condizione non viene verificata, tale variabile risulta non definita e potrebbe generare degli errori, che possono risolversi comunque in vari modi.
Inizializzando la variabile prima:
PHP:
$x = true;
$y = 2;
$a = "";
if($x) $a = $y;

echo $a;

Usando l'operatore @ per il controllo dell'errore (sconsigliato):
PHP:
$x = true;
$y = 2;
if($x) $a = $y;

echo @$a;

Usando else per assegnare un valore alternativo:
PHP:
$x = true;
$y = 2;
if($x) $a = $y;
else $a = "";

echo $a;

O analogamente, usando l'operatore ternario:
PHP:
$x = true;
$y = 2;
$a =  $x ? $y : "";

echo $a;

Se invece ti serve creare un blocco di codice da poter eseguire dove e quando vuoi sul tuo codice, puoi creare una funzione da poter richiamare successivamente, come consigliato da RecallingTea31.
In questo caso puoi decidere che la funzione restituisca direttamente il valore:
PHP:
$x = true;
$y = 2;
$a = function(){
	global $x,$y;
	return $x ? $y : "";
};

echo $a();

O così:
PHP:
$x = true;
$y = 2;
function a(){
	global $x,$y;
	return $x ? $y : "";
};

echo a();

Se vuoi invece che la funzione stessa stampi il risultato, puoi inserire l'echo dentro la funzione:
PHP:
$x = true;
$y = 2;
function a(){
	global $x,$y;
	if ($x) echo $y;
};

a();
 
Se stai pensando di salvare del codice PHP come stringa da eseguire per risolvere un problema, nel 99% dei casi esiste una soluzione migliore per gestire la questione.

Per conoscenza, ciò che hai scritto nel post è possibile tramite l'uso del costrutto eval()
PHP:
eval($a);

L'uso di questo costrutto è però altamente sconsigliato, ti riporto quel che dice la documentazione di php in proposito:


Esistono anche altri modi per ottenere lo stesso risultato, ma eval risulta essere comunque quello più performante.


Quali sono gli altri modi?
Grazie comunque, è proprio quello che cerco.
 
Il primo è quello di scrivere la stringa in un file temporaneo delimitandola con i tag di php, a quel punto basta includere il file nella pagina ed eseguirà il codice php contenuto.

Un altro che mi viene in mente è di usare un data wrapper per simulare l'inclusione di un file che però viene definito al volo nella stringa di inclusione stessa:
PHP:
$code = 'echo "hello world";';

// scriverà in output "hello world"
require 'data://text/plain;base64,'. base64_encode($code);

Quest'ultima soluzione funziona solo se nel php.ini sono abilitati i seguenti parametri:
Codice:
allow_url_fopen = On
allow_url_include = On


In ogni caso, sono tutte soluzioni pericolose tanto quanto l'eval stesso.
 

Discussioni simili