2011-03-09 12 views
5

Próbuję dowiedzieć się, jak używać zdefiniowanej zmiennej podczas używania <<<HTML w php. To jest przykład tego, co chcę osiągnąć:Uzyskiwanie dostępu do zdefiniowanej zmiennej wewnątrz <<< HTML w php

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

Co znajduje się w odpowiedni sposób na uzyskanie zdefiniowanego „TEST” wewnątrz <<<HTML?

Edytuj:
Zrobiłem mały test, aby sprawdzić, która z metod jest najszybsza. Do mojego testu użyłem 20 zmiennych wewnątrz heredoc. Oto, co stało się z różnymi metodami (w sekundach):
Accessing defined variable inside <<<HTML in php wydaje się być najwolniejszym sposobem robienia tego - 0,00216103.
Accessing defined variable inside <<<HTML in php jest szybszy - 0.00073290.
Accessing defined variable inside <<<HTML in php jest jeszcze szybszy - 0.00052595.
Accessing defined variable inside <<<HTML in php jest najszybszy - 0,00011110.

Nadzieja pomaga to ktoś inny :)

Odpowiedz

10

To nie całkiem Obawiam się, ale ...

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

var $defined = TEST; 

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

Nie ma, o ile jestem świadomy co najmniej z sposób użycia zdefiniowanych wartości bezpośrednio w tym kontekście, musisz użyć zmiennej.

+0

To też ja też. Byłem ciekawy, czy jest inny sposób. – tftd

+2

dostaje głos - wyłącznie dlatego, że ma rację. Składnia heredoc może oceniać tylko zmienne - aby wstawić ją do łańcucha, musisz przypisać stałą do zmiennej. Może spojrzeć na alternatywną technikę budowania ciągów? –

+0

Używam normalnych zmiennych zamiast zdefiniowanych. Właśnie zastanawiałem się, czy rzeczy zostały ocenione na lepsze w php, ale najwyraźniej będę musiał używać zmiennych przez długi czas :) – tftd

3

Nie możesz. Przypisz jego wartość do prawdziwej zmiennej.

5

Oto metoda znalazłem w informacji dodatkowej instrukcji PHP: http://www.php.net/manual/en/function.define.php#100449

To trochę zawiłe, ale powinno działać.

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

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

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

Jeśli masz wiele zdefiniowane stałe do włączenia, to byłoby lepsze niż ręczne przypisanie wiele zmiennych wartości stałych.

+0

Wow dude ... ten kod kołysze! Nigdy nie sądziłem, że możesz korzystać z funkcji wewnątrz heredoc w ten sposób! Dzięki za udostępnienie! – tftd

+0

Tak jak powiedziałem, jest to trochę zawiłe. Kredyt musi przejść do twórcy kodu w podręczniku PHP. Jest tam kilka klejnotów od poważnych ekspertów. –

+0

To wygląda mi na eval. ^^ –

4

Można utworzyć klasę, która działa jak akcesor do stałych:

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

utworzyć instancję, aby móc go używać w heredoc:

$defines = new DefineAccessor; 

a następnie używać go jak to:

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

To jest ładne i wielokrotnego użytku rozwiązanie, coś w stylu bummer, że jest to konieczne. –