2010-05-11 9 views
5

Bu php manuel şudur: tanımlanmamış bir sabit kullanırsanız http://us.php.net/manual/en/language.constants.syntax.phpTanımsız sabitlerin dizeler olarak yorumlanmasını önlemek için PHP'de bir yapılandırma seçeneği var mı?

, PHP "SABİT" vs sadece bir dize olarak adlandırılan sanki (SABİT ve sabiti adını anlamına varsayar). Bu olduğunda, E_NOTICE seviyesinde bir hata verilecektir.

Bu davranışı gerçekten sevmiyorum. Gerekli bir sabit tanımlayamazsam, betiğin başarısız olmasını ve bunu tanımlamayı zorlaştırır. Tanımlanmamış bir sabit kullanmaya çalışırsa PHP'nin betiği çökmesine zorlamanın bir yolu var mı? Örneğin,

. Bu betiklerin ikisi de aynı şeyi yapıyor.

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

ve

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

isterim doğrusu ikinci senaryo DIE

ve tanımlanmamış bir sabit DEBUG kullanmaya çalıştı beyan ederim.

cevap

3

sözde kodu:

/** 
* 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"); 
012 böyle bir şey (çirkin) yapabilirdi
+0

Tanımlanmamış bir sabit kullanmak için hata kodu 8 olarak görünmektedir. – Tgr

+0

Teşekkürler Tgr! PHP sabitini E_USER_NOTICE olarak değiştirdim. – powtac

+0

+1 - Benimkinden daha iyi cevap. Muhtemelen bu hatayı ayarlamak için iyi bir fikir, hata ayıklama sırasında yavaşça (ve bazı yanlış pozitifler verebilir) bir alt dize kontrolünden bağlandığından. – Geoff

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

Onun ... Ben bunu biliyorum –

+0

E_ERROR yükseltmek uyarıyı istiyor düşünüyorum, ama umuyordum daha zarif bir çözüm. @Byron Evet, PHP'nin bir E_NOTICE – mrbinky3000

1

gelişmekte ederken atılan hatanın türünü değiştirmek için bir yol olduğunu sanmıyorum, ama sen bu hataları görmek üzere error_reporting kullanılarak E_ALL rapor hatayı değiştirebilirsiniz:

error_reporting(E_ALL); 
+0

yerine bildirmesi ve E_ERROR olmasını isterdim. Ancak bu bir Bildirim ile bir Uyarı olarak kalır! – powtac

İlgili konular