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!
 

RecallingTea31

Utente Attivo
11 Feb 2015
40
0
0
Dal quel che so non è possibile , però puoi salvare in una variabile una funzione, quindi crea una funzione con quelle istruzioni.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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.
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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();
 

PHPMan

Nuovo Utente
2 Feb 2015
17
2
0
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.
 

flameseeker

Utente Attivo
27 Nov 2013
699
0
0
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
Autore Titolo Forum Risposte Data
D Assegnare codice cliente per poi richiamarlo PHP 1
I Assegnare dati fetch request ad una variabile globale Javascript 0
D assegnare risultato di una jquery ad una text Javascript 2
D [PHP] assegnare una classe PHP 1
E assegnare a una variabile il contenuto di un url (javascript) Javascript 0
V [WordPress] Assegnare id ad una tabella lista associandola ad un utente WordPress 0
S Assegnare valori mysql a checkbox PHP 0
JackIlPazzo Assegnare un id ad elementi con parser PHP 2
C E' possibile assegnare all' attributo name di un form html il nome di una variabile php? PHP 6
G Assegnare a una variabile un valore PHP 1
M Assegnare un id o classe a una variabile php PHP 5
S assegnare src iframe tramite php PHP 3
L assegnare funzione solo ad una pagina PHP 1
M Assegnare classi diverse a div in un ciclo while PHP 3
S Assegnare link ad un marker di google maps Javascript 2
F Google maps: Assegnare icone personalizzate a markers estratti da mysql. Javascript 3
B ciclo con array, assegnare una classe differente per ciascun risultato PHP 3
C Assegnare una class ai ' TD ' presenti in uno script html Javascript 17
zighy Assegnare record ad un campo in base al valore di un altro campo PHP 2
G assegnare un valore da passare in post, da una lista jQuery 6
T assegnare ad una classe uno stile Javascript 2
S Assegnare ad una variabile il valore di uno specifico campo di una tabella PHP 3
J Assegnare un valore a un pulsante per poi spedirlo con un form Flash 0
L Come assegnare foto ad ogni giocatore? PHP 5
M Possibile assegnare un link ad un frame di un Movie clip? Flash 10
P Come assegnare un body tramite onclick? Javascript 1
A Assegnare un "doctype" a una pagina html HTML e CSS 4
G Assegnare ad una variabile un pagina in php PHP 3
Eugene Form - assegnare valore a check vuoto PHP 2
A textpattern: assegnare una classe alla section list HTML e CSS 0
A Assegnare rango ad una classifica in MS Access MS Access 1
M Analisi sito per pulire codice inutile HTML e CSS 1
JeiMax Modifica codice php personalizzato PHP 2
R Dubbi su siti sviluppati con Wordpress e con codice WordPress 6
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
L Php_aggiornamento codice PHP 3
Shyson Codice wp-login non funziona PHP 2
G Codice html Javascript 1
Shyson Modificare codice e creare link PHP 0
F Il codice php è giusto? PHP 2
napuleone Con le date il codice da di matto o forse non è così Javascript 6
napuleone visualizzare il codice senza usare gli & HTML e CSS 1
Shyson Codice che trova item casuali PHP 1
E Barra di avanzamento codice PHP PHP 4
R [c#] Proteggere il codice dell'applicazione C/C++ 0
D modificare questo codice per inserimento in text e non in tabella jQuery 1
L salvare codice html in mysql PHP 3
A eliminare caratteri diacritici con codice ascii PHP 4
M Controllo del codice fiscale/partita iva PHP 11
Z Difficoltà codice data PHP 0

Discussioni simili