Ben OO PHP öğrenme yaşıyorum ve kodlama uygulamaları düz bazılarını almak için çalışıyorum. İşte ben hata için kullanan (ve istisna) işleme ediyorum bazı kod kırpılmış bir versiyonu:
final class MyErrorExceptionHandler {
private $level = array(); // error levels to be handled as standard errors
private $path = array(); // full path to file
private $path_short; // filename plus working dir
public function myErrorHandler($severity, $message, $file, $line) {
if (error_reporting() & $severity) { // error code is included in error_reporting
$this->level = array(E_WARNING => 'warning',
E_NOTICE => 'notice',
E_USER_WARNING => 'user warning',
E_USER_NOTICE => 'user notice');
if (array_key_exists($severity, $this->level)) { // handle as standard error
/*$this->severity = $severity;
$this->message = $message;
$this->file = $file;
$this->line = $line;*/
$this->printMessage($severity, $message, $file, $line);
} else { // fatal: E_USER_ERROR or E_RECOVERABLE_ERROR use php's ErrorException converter
throw new ErrorException($message, 0, $severity, $file, $line);
}
}
} // fn myErrorHandler
private function printMessage($severity, $message, $file, $line) {
echo ucfirst($this->level[$severity]) . ': ' . $message;
$this->shortenPath($file);
echo ' in ' . $this->path_short . ' on line ' . $line;
} // fn printMessage
private function shortenPath($file) {
$this->path_short = $file;
$this->path = explode(DIRECTORY_SEPARATOR, $file);
if (count($this->path) > 2) { // shorten path to one dir, if more than one dir
$this->path_short = array_pop($this->path); // filename
$this->path_short = end($this->path) . DIRECTORY_SEPARATOR . $this->path_short; // dir+file
}
} // fn shortenPath
} // cl MyErrorExceptionHandler
Ben terminoloji üzerinde% 100 değilim, çünkü bu sorunun başlık biraz kapalı muhtemelen. Temelde ben bir şeyler anlamaya çalışıyorum.
- Bu hakkı açıkça
$level
beyan ve$path
diziler olarak mı? $level
olduğu gibi ilan edilmesi gerektiğini (ve yapılan$this->level
)? Eğer öyleyse, ben akıllıca bir yerde değerini (E_WARNING
vb) atadınız? Yapıcı (burada gösterilmemiştir) akıllı bir seçim olacaktır?- Note the commented block in
myErrorHandler()
. Originally I had declared all of these properties at the top of the class, and then called$this->printMessage()
ileout any parameters. Which is the more correct way? If I keep the code as is, would I want to then use$this->severity = $severity
etc. insideprintMessage()
? - Yani, daha iyi olurdu:
değiştirmek
$this->shortenPath($file);
echo ' in ' . $this->path_short . ' on line ' . $line;
ile
$path_short = $this->shortenPath($file);
echo ' in ' . $path_short . ' on line ' . $line;
sonuçta, ve bir geri dönüş değeri vermek shortenPath()
?
I realize this is a mishmash of several different questions, but what I'm trying to get at is a common inquiry about the proper style of declaring/using variables/properties, specifically when dealing ile methods.
Özetlemek gerekirse: When should I use $this->foo = $foo
strong>