Istisnalar hatalarını tedavi etmek için modern bir yol ise Kabaca hataları, PHP bir miras. Basit şey, sonra bir istisna atar bir hata işleyicisi, kurmaktır. Bu şekilde tüm hataları istisnalar dönüştürülür, ve o zaman sadece bir hata işleme düzeni ile başa çıkabilirim. Aşağıdaki kodu sizin için istisnalar hataları dönüştürür:
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
set_error_handler('exceptions_error_handler');
error_reporting(E_ALL ^ E_STRICT);
Kod özellikle hataları ile çalışmak üzere tasarlanmış olduğu birkaç olgu olsa vardır. Örneğin, DomDocument
raises warnings, when validating a document. If you convert errors to exceptions, it will stop validating after the first failure. Some times this is what you want, but when validating a document, you might actually want all başarısızlık schemaValidate
yöntemi. Bu durumda, geçici hataları toplayan bir hata işleyicisi, yükleyebilirsiniz. İşte bu amaçla kullandım küçük bir parçasını, bulunuyor:
class errorhandler_LoggingCaller {
protected $errors = array();
function call($callback, $arguments = array()) {
set_error_handler(array($this, "onError"));
$orig_error_reporting = error_reporting(E_ALL);
try {
$result = call_user_func_array($callback, $arguments);
} catch (Exception $ex) {
restore_error_handler();
error_reporting($orig_error_reporting);
throw $ex;
}
restore_error_handler();
error_reporting($orig_error_reporting);
return $result;
}
function onError($severity, $message, $file = null, $line = null) {
$this->errors[] = $message;
}
function getErrors() {
return $this->errors;
}
function hasErrors() {
return count($this->errors) > 0;
}
}
Ve kullanımı durum:
$doc = new DomDocument();
$doc->load($xml_filename);
$validation = new errorhandler_LoggingCaller();
$validation->call(
array($doc, 'schemaValidate'),
array($xsd_filename));
if ($validation->hasErrors()) {
var_dump($validation->getErrors());
}