2013-04-13 35 views
6

Có cách nào để đánh giá một dấu ngoặc kép bên trong không đổi để tránh nối bằng cách sử dụng .?Có thể đánh giá các hằng số bên trong dấu nháy kép không?

Ví dụ, tôi có thể làm những việc như:

echo "$variable"; 

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

echo "{$this->myProperty}"; 

Unfortunally echo "{} MY_CONSTANT" không làm việc.

Vì vậy, có cách nào để đánh giá một hằng số như trong các ví dụ ở trên, tránh ghép nối không?

Tôi biết là có các lựa chọn thay thế cho mã và nhận được kết quả tương tự, nhưng tôi chỉ nhắm vào các hằng số.

Động lực của tôi cho điều này là để viết các câu lệnh sql, ví dụ:

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

đâu MY_JOIN liên tục có thể là một cái gì đó giống như

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

hoặc để tránh một cái gì đó giống như

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

Tôi biết tôi có thể viết một cái gì đó như $separator = DIRECTORY_SEPARATOR và mã $dir = "{$separator}folder1{$separator}folder2{$separator}"; nhưng nếu có thể, tôi muốn thực hiện điều này với các hằng số trực tiếp.

+0

câu hỏi tương tự: http://stackoverflow.com/questions/1267093/php-static-variables-in-double-quotes – Nate

+0

Thx về các liên kết. Tôi đồng ý, câu hỏi của tôi trùng lặp với câu hỏi đó. Nhưng tôi nghĩ rằng tôi đã giải thích tốt hơn một chút và tạo ra một động lực ^^ – GarouDan

Trả lời

1

Không, điều này không thể thực hiện được.

Tuy nhiên, hai cách giải quyết tuyệt vời cho ví dụ cụ thể của bạn:

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

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

'join' thường được viết là' implode', mặc dù cả hai đều tham chiếu đến cùng một hàm – IMSoP

+0

Tôi biết điều đó và tôi thích cụm từ 'join' hơn . – deceze

+0

Công bằng mà tôi cho là vậy. Một ưu điểm của 'implode' là nó tự nhiên đi với' phát nổ', điều quan trọng là * không * giống như 'tách'. – IMSoP

2

Thú vị, như các liên kết đề nghị, chúng ta có thể làm điều này với các hàm lambda, rất thú vị.

Một ví dụ làm việc:

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

define('FOO', 'Hello World!'); 
echo "The string says {$constant('FOO')}"; 
Các vấn đề liên quan