2009-08-03 32 views
51

Ai đó có thể giải thích sự khác biệt giữa việc sử dụngDEFINE vs Biến trong PHP

define('SOMETHING', true); 

$SOMETHING = true; 

Và có lẽ những lợi ích giữa một hay khác?

Tôi sử dụng biến ở mọi nơi và thậm chí trong tệp loại cấu hình được bao gồm trong mọi trang, tôi vẫn sử dụng các biến vì tôi không thấy lý do sử dụng phương thức xác định.

Trả lời

76

DEFINE tạo một hằng số và hằng số là toàn cục và có thể được sử dụng ở mọi nơi. Chúng cũng không thể được định nghĩa lại, các biến nào có thể.

Tôi thường sử dụng DEFINE cho Configs vì không ai có thể gây rối với nó sau khi thực tế, và tôi có thể kiểm tra nó ở bất kỳ nơi nào mà không có toàn cầu, giúp kiểm tra dễ dàng hơn.

+0

tôi có thể vượt qua id của người dùng từ cơ sở dữ liệu vào phiên? ví dụ. define ($ _ SESSION ['user_id'], dòng ['id']) mà hàng ['id'] đến từ cơ sở dữ liệu –

11

Sau khi được xác định, một 'hằng số' không thể thay đổi khi chạy, trong khi một phép gán biến thông thường có thể.

Hằng số tốt hơn cho những thứ như chỉ thị cấu hình không nên thay đổi trong khi thực thi. Hơn nữa, mã dễ đọc hơn (và duy trì việc chuyển giao &) nếu các giá trị có nghĩa là không đổi là rõ ràng là đã làm như vậy.

6

xác định() tạo biến chỉ đọc, so với biến chuẩn hỗ trợ hoạt động đọc và ghi.

+1

chỉ là một lưu ý - tôi không thấy cụm từ "biến chỉ đọc" áp dụng cho define() - là trạng thái thủ công, nó định nghĩa một hằng số * có tên *, cái gì đó hoàn toàn khác. –

+0

-1: sai, và thậm chí nếu nó không phải là nó chỉ đơn giản là nhắc lại hai bài viết trên. – hobodave

+2

Một hằng số không phải là một biến theo định nghĩa (không có ý định chơi chữ) ;-) –

3

Ngoài ra còn có sự khác biệt về phạm vi.

Trong ví dụ được đưa ra bởi áp phích gốc, $SOMETHING sẽ không thể truy cập được trong một hàm trong khi define('SOMETHING', true) sẽ là.

0

Một hằng là rất hữu ích khi bạn muốn truy cập dữ liệu từ bên trong một hàm, kiểm tra này

<?php function data(){ 
define("app","hey you can see me from outside the function",false); 

$tech = "xampp"; } data(); echo $tech; echo app; ?> 

Nếu bạn sử dụng một biến bạn sẽ không bao giờ có được giá trị bên trong đây là những gì tôi nhận được

Notice: Undefined biến: công nghệ trong D: \ xampp \ htdocs \ data \ index.php on line 8 hey bạn có thể thấy tôi từ bên ngoài chức năng