2011-08-22 41 views
6

có thể là một biến được tham chiếu mà không sử dụng $?

Ví dụ:

if ($a != 0 && a == true) { 
... 
} 

Tôi không nghĩ như vậy, nhưng các mã (không được viết bởi tôi) không hiển thị lỗi và tôi nghĩ rằng đó là lạ. Tôi đã bỏ qua mã và không phải là một hằng số.

+5

thử: 'error_reporting (E_ALL^​​E_STRICT);' Và php sẽ cho bạn biết rằng nó không thể tìm thấy '$ a' và thay vào đó sẽ sử dụng chữ' a' (nghĩa là ký tự a) cho ký tự. – Yoshi

+0

@Yoshi: Viết một câu trả lời, p –

+0

@Tomalak Geret'kal Michael đã bao gồm điểm này và thậm chí anh ấy còn có một lời giải thích tốt hơn.; P – Yoshi

Trả lời

8

Trong PHP, một hằng số có thể được xác định, mà sau đó sẽ không có $, nhưng một biến phải có một. Tuy nhiên, đây không phải là một biến, và không phải là một thay thế cho một biến. Các hằng số được định nghĩa chính xác một lần và không thay đổi trong suốt thời gian tồn tại của tập lệnh.

define('a', 'some value for a'); 

Ngoài ra, bạn không thể suy giá trị của một hằng số bên trong một dụng dấu ngoặc kép hoặc HEREDOC chuỗi:

$a = "variable a" 
define('a', 'constant a'); 

echo "A string containing $a"; 
// "A string containing variable a"; 

// Can't do it with the constant 
echo "A string containing a"; 
// "A string containing a"; 

Cuối cùng, PHP có thể ra thông báo cho một Use of undefined constant a - assumed 'a' và giải thích nó như là một nhầm lẫn không thể viện chứng chuỗi "a". Tìm trong nhật ký lỗi của bạn để xem điều đó có xảy ra không. Trong trường hợp đó, "a" == TRUE là hợp lệ, vì chuỗi "a" không trống và được so sánh một cách lỏng lẻo với TRUE boolean.

echo a == TRUE ? 'true' : 'false'; 
// Prints true 
// PHP Notice: Use of undefined constant a - assumed 'a' 
+0

Ngày đầu đó, theo mặc định nếu PHP thấy một hằng số không xác định, nó sẽ giả sử một hằng số với giá trị của chuỗi. Với ví dụ của bạn về một, PHP sẽ giải thích rằng như là một hằng số có tên là a, với một giá trị của 'a' (như một chuỗi). Điều này gây ra một thông báo hoặc một cái gì đó: tăng giá trị báo cáo lỗi của bạn để xem nó. – Narcissus

+0

@Narcissus cảm ơn - đã được thêm khi bạn đang nhập nhận xét của mình :) –

2

Với mã này:

if ($a != 0 && a == true) { 
    ... 
} 

Bạn sẽ không nhận được bất kỳ lỗi vì bạn (hoặc ai đó) đã nói với PHP để không báo cáo bất kỳ lỗi, cảnh báo hoặc thông báo với mã đó. Bạn đặt báo cáo với một mức độ cao hơn lỗi và bạn sẽ nhận được một thông báo:

Chú ý: Sử dụng liên tục không xác định một - giả 'a' trong ...

Mà sẽ có nghĩa là a được đọc dưới dạng hằng số có giá trị là "a". Đây không phải là những gì bạn đang thực sự tìm kiếm tôi đoán:

if ($a != 0 && "a" == true) { 
    ... 
} 

Phần thứ hai "a" == true sẽ luôn luôn được true, vì vậy đây thực sự là như vậy:

if ($a != 0) { 
    ... 
} 

Vì nó không phải là mã của bạn, một chỉ có thể giả định rằng điều này không được dự định bởi tác giả gốc.

Vì vậy: Các biến trong PHP luôn bắt đầu bằng ký hiệu đô la $. Mọi thứ khác không phải là một biến.

1

Theo định nghĩa, biến PHẢI bắt đầu bằng $. Ngoài ra, nó không thể bắt đầu bằng một số để một tên biến như $ 1badVar không hợp lệ. Tuy nhiên, nó có thể bắt đầu bằng chữ cái hoặc dấu gạch dưới.

Các vấn đề liên quan