2013-07-29 35 views
9

Tôi không thể hiểu tại sao mã này được thực hiện không phải là cách tôi muốn. PHP được xác định() tại sao nó trả về false, ngay cả khi hằng số được xác định?

define('TEST', 123); 
echo TEST; 
echo "\n"; 
var_dump(defined(TEST)); 

in:

123 
bool(false) 
+4

@downvoters, đầu óc giải thích? Đây là một câu hỏi hay, rõ ràng điều gì đang được hỏi, anh ta đã thử một cái gì đó và chia sẻ mã của mình. Ông cũng nêu ra kỳ vọng của mình và kết quả thực sự là gì. – Kevin

Trả lời

19

Bởi vì bạn không đề cập đến hằng số tên TEST - bạn đang đề cập đến bất cứ điều gì TEST chứa.

bọc ra, đây là những gì bạn đang làm (mã là đúng - không có 123 không đổi):

var_dump(defined(123)); 

Tham khảo các tên liên tục để thay thế (kèm theo nó trong dấu ngoặc kép):

var_dump(defined('TEST')); 
2

Có thể vì định nghĩa() yêu cầu một chuỗi làm tham số.

var_dump(defined('TEST')); 
+0

Không hoàn toàn đúng. Nếu bạn thử 'define (TEST)' và hằng số * không được định nghĩa, bạn sẽ nhận được một 'E_NOTICE', nhưng nó sẽ chuyển nó thành chuỗi' TEST', vì vậy nếu nó * không được định nghĩa, nó giống như nói 'được định nghĩa ('TEST')'. – h2ooooooo

+0

@ h2ooooooo [Theo tài liệu php] (http://php.net/manual/en/function.defined.php) "bool được xác định (chuỗi $ name)" và "Trả về TRUE nếu hằng số được đặt tên theo tên đã được định nghĩa, FALSE nếu không. " – Kevin

3

sử dụng có gọi nó là sai

define('TEST', 123); 
echo TEST; 
echo "\n"; 
var_dump(defined(TEST));//provide The constant name you are providing 123 so it not defined 
//correct call would be 
var_dump(defined('TEST')); 
Các vấn đề liên quan