php: özdevinimli_yükle istisna işleme

1 Cevap php

I'm extending my previous question (Handling exceptions within exception handle) to address my bad coding practice. I'm trying to delegate autoload errors to a exception handler.

<?php
function __autoload($class_name) {
    $file = $class_name.'.php';
    try {
        if (file_exists($file)) {
            include $file;  
        }else{
            throw new loadException("File $file is missing");
        }
        if(!class_exists($class_name,false)){
            throw new loadException("Class $class_name missing in $file");
        }
    }catch(loadException $e){
        header("HTTP/1.0 500 Internal Server Error");
        $e->loadErrorPage('500');
        exit;
    }
    return true;
}
class loadException extends Exception {
    public function __toString()
    {
        return get_class($this) . " in {$this->file}({$this->line})".PHP_EOL
                                ."'{$this->message}'".PHP_EOL
                                . "{$this->getTraceAsString()}";
    }
    public function loadErrorPage($code){
        try {
            $page = new pageClass();
            echo $page->showPage($code);
        }catch(Exception $e){
            echo 'fatal error: ', $code;
        }
    }
}



$test = new testClass();
?>

Yukarıdaki komut testClass.php dosyası eksik ise 404 sayfa yüklemek gerekiyordu ve pageClass.php dosya yanı eksik SÜRECE ben bir bakın, bu durumda, ince çalışır

"Fatal error: Class 'pageClass' D bulunamadı: \ xampp \ htdocs \ Test \ PHP \ errorhandle \ index.php on line 29" yerine bir "fatal error: 500" mesajı

Ben her sınıf autoload (nesne oluşturma) için bir try / catch bloğu eklemek istemiyorum, bu yüzden bu çalıştı.

Bu işleme uygun yolu nedir?

1 Cevap

Bu hata sayfası dışarı almak için bile gerekli gibi görünüyor çünkü sen, pageClass erken sürecinde kontrol denediniz mi? O yok, ve bu sınıf yok yürütmenin dışında bombalıyor, w / herhangi bir nesne (örneğin, sadece HTML) o 404 sayfa yazmak istemiyorsanız iyi bir yol olarak görünüyor eğer.

Umut olur.

Thanks, Joe