2010-05-11 10 views
5

Questo è da manuale di PHP: http://us.php.net/manual/en/language.constants.syntax.phpEsiste un'opzione di configurazione in PHP per impedire che le costanti non definite vengano interpretate come stringhe?

Se si utilizza una costante non definita, PHP presuppone che si intende il nome della stessa costante, proprio come se si chiama come una stringa (COSTANTE vs "costante"). Quando ciò accade, verrà emesso un errore di livello E_NOTICE.

Davvero non mi piace questo comportamento. Se non sono riuscito a definire una costante richiesta, preferirei che lo script fallisse, così che io sia forzato a definirlo. Esiste un modo per forzare PHP a bloccare lo script se tenta di utilizzare una costante indefinita?

Ad esempio. Entrambi questi script fanno la stessa cosa.

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

e

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

avrei preferito il secondo dado di script e dichiarare che ha cercato di utilizzare un DEBUG costante indefinito.

risposta

3

si potrebbe fare qualcosa (brutto) in questo modo: codice

pseudo:

/** 
* 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

Il codice di errore per l'utilizzo di una costante non definita sembra essere 8. – Tgr

+0

Grazie Tgr! Ho modificato la costante PHP in E_USER_NOTICE. – powtac

+0

+1 - Risposta migliore della mia. Probabilmente è una buona idea impostare solo questo handle di errore quando si esegue il debug dal momento che si incastra su un controllo di sottostringa che può essere lento (e può dare alcuni falsi positivi). – Geoff

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

Credo che voglia l'avvertimento di sollevare un E_ERROR ... –

+0

So che potrei farlo, ma speravo in una soluzione più elegante. @Byron Sì, vorrei che PHP dichiarasse ed E_ERROR invece di un E_NOTICE – mrbinky3000

1

Io non credo che ci sia un modo per cambiare il tipo di errore gettato, ma è possibile modificare l'errore di riferire al E_ALL utilizzando error_reporting in modo che si vede questi errori durante lo sviluppo:

error_reporting(E_ALL); 
+0

Ma con questo un avviso rimane un avviso! – powtac

Problemi correlati