2010-05-11 19 views
5

Đây là từ hướng dẫn php: http://us.php.net/manual/en/language.constants.syntax.phpCó tùy chọn cấu hình nào trong PHP để ngăn các hằng số không xác định được hiểu là chuỗi không?

Nếu bạn sử dụng một hằng số không xác định, PHP giả định rằng bạn có nghĩa là tên của bản thân liên tục, giống như khi bạn gọi nó như là một chuỗi (CONSTANT vs "CONSTANT"). Lỗi E_NOTICE cấp sẽ được cấp khi điều này xảy ra.

Tôi thực sự không thích hành vi này. Nếu tôi đã thất bại trong việc xác định một hằng số cần thiết, tôi sẽ thay vì kịch bản thất bại để tôi buộc phải xác định nó. Có cách nào để buộc PHP để sụp đổ kịch bản nếu nó cố gắng sử dụng một hằng số không xác định?

Ví dụ: Cả hai kịch bản này đều làm điều tương tự.

<?php 
define('DEBUG',1); 
if (DEBUG) echo('Yo!'); 
?> 

<?php 
if(DEBUG) echo('Yo!'); 
?> 

Tôi thà kịch bản DIE thứ hai và tuyên bố rằng nó đã cố gắng sử dụng một DEBUG hằng số không xác định.

Trả lời

3

bạn có thể làm một cái gì đó (xấu xí) như thế này: mã

giả:

/** 
* A Notice becomes an Error :) 
*/ 
function myErrorHandler($errno, $errstr, $errfile, $errline) { 
    if ($errno == E_NOTICE) { // = 8 
     if (substr($errstr ...)) { // contains something which looks like a constant notice... 
      trigger_error('A constant was not defined!', E_USER_ERROR); 
     } 
    } 
} 
set_error_handler("myErrorHandler"); 
+0

Mã lỗi để sử dụng hằng số không xác định xuất hiện là 8. – Tgr

+0

Cảm ơn Tgr! Tôi đã thay đổi hằng số PHP thành E_USER_NOTICE. – powtac

+0

+1 - Câu trả lời hay hơn tôi. Có lẽ là một ý tưởng tốt để chỉ thiết lập lỗi này xử lý khi gỡ lỗi vì nó bản lề trên một kiểm tra chuỗi con có thể chậm (và có thể cho một số dương tính giả). – Geoff

1
if(!defined('DEBUG')) die('failed.'); 
+0

Tôi nghĩ rằng ông muốn cảnh báo để nâng cao một E_ERROR ... –

+0

Tôi biết tôi có thể làm điều đó, nhưng tôi đã hy vọng cho một giải pháp thanh lịch hơn. @Byron Có, tôi muốn PHP khai báo và E_ERROR thay vì E_NOTICE – mrbinky3000

1

Tôi không nghĩ rằng có một cách để thay đổi loại lỗi ném, nhưng bạn có thể thay đổi các báo cáo lỗi để E_ALL sử dụng error_reporting để bạn nhìn thấy các lỗi này trong khi đang phát triển:

error_reporting(E_ALL); 
+0

Nhưng với thông báo này vẫn là một Thông báo! – powtac

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