Umformulierter Titel: Warum behandelt PHP die Fehler „Klasse nicht gefunden' nicht?
P粉475126941
P粉475126941 2024-01-03 19:53:41
0
2
500

Im folgenden Beispiel möchte ich den Fehler abfangen und eine Null-Klasse erstellen, wenn die Klasse nicht existiert.

Aber trotz meiner try/catch-Anweisung sagt mir PHP einfach 未找到 'SmartFormasdfasdf' 类 .

Wie kann man PHP dazu bringen, „Class Not Found“-Fehler abzufangen?

<?php
class SmartFormLogin extends SmartForm {
    public function render() {
        echo '<p>this is the login form</p>';
    }
}

class SmartFormCodeWrapper extends SmartForm {
    public function render() {
        echo '<p>this is the code wrapper form</p>';
    }
}

class SmartFormNull extends SmartForm {
    public function render() {
        echo '<p>the form "' . htmlentities($this->idCode) . '" does not exist</p>';
    }
}

class SmartForm {

    protected $idCode;

    public function __construct($idCode) {
        $this->idCode = $idCode;
    }

    public static function create($smartFormIdCode) {
        $className = 'SmartForm' . $smartFormIdCode;
        try {
            return new $className($smartFormIdCode);
        } catch (Exception $ex) {
            return new SmartFormNull($smartformIdCode);
        }
    }
}

$formLogin = SmartForm::create('Login');
$formLogin->render();
$formLogin = SmartForm::create('CodeWrapper');
$formLogin->render();
$formLogin = SmartForm::create('asdfasdf');
$formLogin->render();
?>

Lösung:

Danke @Mchl, so habe ich es gelöst:

public static function create($smartFormIdCode) {
  $className = 'SmartForm' . $smartFormIdCode;
  if(class_exists($className)) {
    return new $className($smartFormIdCode);
  } else {
    return new SmartFormNull($smartFormIdCode);
  }
}


P粉475126941
P粉475126941

Antworte allen(2)
P粉680000555

老问题,但在 PHP7 中这是一个可捕获的异常。尽管我仍然认为 class_exists($class) 是一种更明确的方法。但是,您可以使用新的 \Throwable 异常类型执行 try/catch 块:

$className = 'SmartForm' . $smartFormIdCode;
try {
    return new $className($smartFormIdCode);
} catch (\Throwable $ex) {
    return new SmartFormNull($smartformIdCode);
}
P粉810050669

因为这是一个致命错误。使用class_exists()函数检查类是否存在。

另外:PHP 不是 Java - 除非您重新定义默认错误处理程序,否则它会引发错误而不抛出异常。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage