Jörg Reinholz: PHP konfigurieren

Beitrag lesen

PHP stellt fest, dass die benannte Konstante test nicht existiert und nimmt deshalb an, du hättest stattdessen den String 'test' gemeint. Nach der internen Fehlerkorrektur lautet der Ausdruck also if ('text'), und der ergibt true. Das muss man nicht gut finden, aber wohl akzeptieren.

Naja. Man kann da was "veranstalten" und im Fall einer Notiz/Warnung abbrechen:

<?php  
function errHandle($errNo, $errStr, $errFile, $errLine) {  
    $msg = "$errStr in $errFile on line $errLine";  
    if ($errNo == E_NOTICE || $errNo == E_WARNING) {  
        throw new ErrorException($msg, $errNo);  
    } else {  
        echo $msg;  
    }  
}  
  
set_error_handler('errHandle');  
  
if (foo) { echo foo; }  
echo "Das darf nicht mehr ausgegeben werden.";  
?>

Perl verhält sich übrigens ähnlich:

#!/usr/bin/perl -W  
#use strict;  
if (test) { print STDOUT wahr, "\r\n" };  
  
print "Das soll nicht mehr ausgegeben werden.", "\r\n";  

Noch grausamer wird es (weil keine Warnung erfolgt), wenn man das -w oder -W in der shebang vergisst. Aber von daher kommt wohl das Verhalten in PHP. Allerdings kann man in Perl dann immer noch ein einfaches use strict verwenden (oben das Kommentarzeichen entfernen) um ein brauchbares, fehlerintolerantes  Verhalten zu erzwingen.

In PHP kann man das nachbauen, in dem man den Teil:

<?php  
function errHandle($errNo, $errStr, $errFile, $errLine) {  
    $msg = "$errStr in $errFile on line $errLine";  
    if ($errNo == E_NOTICE || $errNo == E_WARNING) {  
        throw new ErrorException($msg, $errNo);  
    } else {  
        echo $msg;  
    }  
}  
set_error_handler('errHandle');  

z.B. nach /foo/bar/use_strict.php schreibt (am besten ohne schließendes '?>'!) und dann so verwendet:

<?php  
require '/foo/bar/use_strict.php';  
  
if (foo) { echo foo; }  
echo "Das soll nicht mehr ausgegeben werden.";  
?>

Jörg Reinholz