2011-03-09 15 views
5

Sto cercando di capire come utilizzare una variabile definita quando si utilizza <<<HTML in php. Questo è un esempio di ciò che voglio ottenere:Accesso alla variabile definita all'interno di <<< HTML in php

<?php 
define('TEST','This is a test'); 
echo <<<HTML 
Defined: {TEST} 
HTML; 
?> 

Qual è il modo adeguato di ottenere il "TEST" definito all'interno del <<<HTML?

Modifica:
Ho fatto un piccolo test per verificare quale dei metodi è il più veloce. Per il mio test ho usato 20 variabili all'interno di heredoc. Ecco cosa è successo con i diversi metodi (in secondi):
Accessing defined variable inside <<<HTML in php sembra essere il modo più lento di farlo - 0,00216103.
Accessing defined variable inside <<<HTML in php è più veloce - 0.00073290.
Accessing defined variable inside <<<HTML in php è ancora più veloce - 0,00052595.
Accessing defined variable inside <<<HTML in php è il più veloce - 0,00011110.

Spero che questo aiuti qualcun altro :)

risposta

10

Non è bello ho paura, ma ...

define('TEST','This is a test'); 

var $defined = TEST; 

echo <<<HTML 
Defined: {$defined} 
HTML; 

Non v'è, per quanto io sappia, almeno, un modo di utilizzare i valori definiti direttamente in quel contesto, è necessario utilizzare una variabile.

+0

Questo è quello che penso anche io. Ero solo curioso di sapere se esiste un altro modo. – tftd

+2

ottiene il voto - puramente perché è giusto. la sintassi di heredoc può solo valutare le variabili - dovresti assegnare una costante a una variabile per inserirla nella tua stringa. Magari guarda una tecnica alternativa per la costruzione di stringhe? –

+0

Io uso variabili normali anziché definite. Mi stavo chiedendo se le cose sono migliorate in php ma apparentemente dovrò usare le variabili per molto tempo :) – tftd

3

Non è possibile. Assegna il suo valore in una variabile reale.

5

Ecco un metodo che ho trovato nelle note relative al manuale di PHP: http://www.php.net/manual/en/function.define.php#100449

E 'un po' contorto, ma dovrebbe funzionare.

<?php 
define('TEST','This is a test'); 

$cst = 'cst'; 
function cst($constant){ 
    return $constant; 
} 

echo <<<HTML 
Defined: {$cst(TEST)} 
HTML; 

Se si dispone di più definito COSTANTI per includere, questo sarebbe meglio che assegnare manualmente un sacco di variabili al valore delle costanti.

+0

Wow amico ... questo codice oscilla! Mai pensato di poter usare le funzioni all'interno di heredoc in questo modo! Grazie per la condivisione ! – tftd

+0

Come ho detto, è un po 'contorto. Il credito deve andare al creatore del codice oltre sul manuale PHP. Ci sono alcune gemme di esperti seri. –

+0

Mi sembra ovvio. ^^ –

4

È possibile creare una classe che agisce come una funzione di accesso alle costanti:

class DefineAccessor { 
    function __get($name) { 
     if (defined($name)) 
      return eval('return ' . $name . ';'); 
    } 
} 

creare un'istanza di esso per essere in grado di utilizzarlo in heredoc:

$defines = new DefineAccessor; 

e quindi utilizzarlo come questo:

echo <<<HTML 
Defined: $defines->TEST 
HTML; 
+0

Questa è una soluzione carina e riutilizzabile, una specie di delusione che è necessaria però. –