2011-11-11 36 views
7

Tôi hiện đang lập trình một trang web (trong PHP4). Tôi có kế hoạch để lưu các giá trị, mà không thay đổi trong thời gian chạy, trong hằng số. Đó là ví dụ số phiên bản của dữ liệu đăng nhập cho cơ sở dữ liệu.Khi nào và cách sử dụng hằng số trong PHP?

Câu hỏi 1: có bất kỳ vấn đề nào (có liên quan đến bảo mật) có thể phát sinh từ việc lưu dữ liệu trong các hằng số không?

Tại thời điểm tôi làm như sau để xác định và gọi liên tục:

define("VERSION", "1.0"); 
echo "Current version: ".VERSION."."; // Result: "Current version: 1.0." 

Có một điều mà làm phiền tôi: Trong trường hợp một hằng số không được định nghĩa là "sai" tên biến được trả thay ví dụ NULL.

define("VERSION", "1.0"); 
echo "Current version: ".VERSIONXXX."."; // Result: "Current version: VERSIONXXX." 

Một giải pháp tôi thấy để có được một thông báo lỗi và giá trị trả về "NULL" khi tôi vô tình bước vào một sai tên liên tục được sử dụng chức năng constant():

define("VERSION", "1.0"); 
echo "Current version: ".constant("VERSIONXXX")."."; // Result: "Current version: ." 

Câu hỏi 2: Tôi có thể ngăn theo một cách khác, PHP trả về tên của biến không tồn tại?

Câu hỏi 3: Giá trị của hằng số trong PHP luôn được trả về bằng hàm constant()?

+4

Có lý do nào khiến bạn ở lại trên PHP4 không còn hoạt động nữa không? – danielrsmith

Trả lời

3

Trong thứ tự ngược lại:

Câu hỏi 3: Không Câu hỏi 2: Không thực sự, nhưng bạn có thể điều chỉnh.

vì (Câu hỏi 1 :) error_reporting. Bạn máy chủ web PHP được cấu hình ẩn một số lỗi.Nếu bạn thêm

error_reporting(E_ALL); 

để đầu kịch bản của bạn, bạn sẽ nhận được một Sử dụng

của MY_CONST liên tục không xác định - giả 'MY_CONST'

Lỗi. Thật không may đó là một vấn đề xuất hiện trong lịch sử lâu dài của PHP, các hằng số có thể được hiểu là chuỗi.

Nếu bạn không thể shure một hằng số đã được thiết lập ở nơi đầu tiên bạn có thể sử dụng được xác định

if(defined('MY_CONSTANT') { 
    //do something 
} 

Nhưng ý kiến ​​cá nhân của tôi không nên có nhiều trường hợp cần này, vì từ liên tục một mình ngụ ý một sự hiện diện garanteed. Ngoại lệ duy nhất tôi có thể nghĩ là thử nghiệm tiêu đề điển hình.

if(!defined('MY_APP_IS_PRESENT')) { 
    die('You can not call this file on its own, please use index.php.'); 
} 

Và một bước cuối cùng: Bạn có thể dùng chức năng errorhandler, thậm chí với firephp?

1

Vâng, bạn luôn có thể sử dụng chức năng defined để đảm bảo hằng số tồn tại. Kết hợp với câu lệnh ba giây, bạn có thể chỉ cần lặp lại một chuỗi rỗng, giống như sau:

echo defined(VERSION) ? VERSION : ""; 

Không phải câu trả lời hay nhất, nhưng hoàn toàn khả thi?

PHP dẫn sử dụng cho defined()http://php.net/manual/en/function.defined.php

6
  1. Nếu bạn cố gắng sử dụng một hằng số không tồn tại, PHP Automagically giả định nó là một chuỗi thay vào đó, đó là lý do tại sao bạn thấy VERSIONXXX.

  2. IIRC nó sẽ cảnh báo nếu bạn báo cáo lỗi ở cấp độ thích hợp. Giải pháp tốt nhất ở đây là đảm bảo mã của bạn sử dụng các tên hằng số thích hợp.

  3. Nếu bạn biết tên của hằng số, cách dễ nhất/tốt nhất để sử dụng trực tiếp. echo MY_CONSTANT
    Nếu bạn không biết tên của hằng số (ví dụ như tên của nó là trong một biến), sử dụng constant():

 
    $name = 'MY_CONSTANT'; 
    echo constant($name); 
Các vấn đề liên quan