2013-04-13 13 views
6

Czy istnieje sposób na oszacowanie stałej wewnątrz podwójnego cudzysłowu, aby uniknąć konkatenacji za pomocą .?Czy można oceniać stałe w podwójnym cudzysłowie?

Na przykład, mogę robić takie rzeczy jak:

echo "$variable"; 

echo "{$array["index"]}"; 

echo "{$this->myProperty}"; 

unfortunally echo "{MY_CONSTANT}" nie działają.

Czy istnieje sposób na oszacowanie stałej, jak w powyższych przykładach, unikając konkatenacji?

Wiem, że istnieją alternatywy dla kodu i uzyskać ten sam wynik, ale zmierzam tylko do stałych.

Moja motywacja do tego celu jest pisać SQL, na przykład:

$sql = "SELECT * FROM {MY_JOIN} WHERE id > 100"; 

Gdzie MY_JOIN stały może być coś podobnego

" 
orders 
INNER JOIN 
users 
    ON (orders.user_id = users.id) 
" 

lub uniknięcia czegoś podobnego

$dir = DIRECTORY_SEPARATOR."folder1".DIRECTORY_SEPARATOR."folder2".DIRECTORY_SEPARATOR; 

Wiem, że mogę napisać coś w stylu: $separator = DIRECTORY_SEPARATOR i kod $dir = "{$separator}folder1{$separator}folder2{$separator}";, ale jeśli to możliwe, chciałbym to zrobić bezpośrednio ze stałymi.

+0

Podobne pytanie: http://stackoverflow.com/questions/1267093/php-static-variables-in-double-quotes – Nate

+0

Thx o linki. Zgadzam się, moje pytanie było duplikatem tego. Ale myślę, że wyjaśniłem trochę lepiej i stworzyłem motywację ^^ – GarouDan

Odpowiedz

1

Nie, po prostu nie jest to możliwe.

jednak dwie wielkie obejścia konkretnych przykładów:

sprintf('SELECT ... %s ...', MY_CONSTANT); 

join(DIRECTORY_SEPARATOR, array('foo', 'bar', 'baz')); 
+1

'join' jest częściej pisane jako' implode', chociaż oba odnoszą się do tej samej funkcji – IMSoP

+0

Jestem tego świadomy i wolę termin "dołącz" . – deceze

+0

Sądzę, że sprawiedliwie. Jedną z zalet 'implodu' jest to, że w naturalny sposób występuje z' eksplodować', co istotnie jest * nie * takie samo jak 'split'. – IMSoP

2

Ciekawe, jak linki zasugerował, możemy to zrobić za pomocą funkcji lambda, bardzo interesujące.

Przykładem pracy:

<?php 
$constant = function($cons){ 
    return constant($cons); 
}; 

define('FOO', 'Hello World!'); 
echo "The string says {$constant('FOO')}"; 
Powiązane problemy