Maison > Questions et réponses > le corps du texte
Dans l'exemple ci-dessous, je souhaite détecter l'erreur et créer une classe Null
si la classe n'existe pas.
Mais malgré ma déclaration try/catch, PHP me le dit simplement 未找到 'SmartFormasdfasdf' 类
.
Comment faire en sorte que PHP détecte les erreurs "Class Not Found" ?
<?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(); ?>
Merci @Mchl, voici comment je l'ai résolu :
public static function create($smartFormIdCode) { $className = 'SmartForm' . $smartFormIdCode; if(class_exists($className)) { return new $className($smartFormIdCode); } else { return new SmartFormNull($smartFormIdCode); } }
P粉6800005552024-01-04 16:54:40
Ancienne question, mais en PHP7, c'est une exception capturable. Bien que je pense toujours que class_exists($class) est une approche plus explicite. Cependant, vous pouvez exécuter des blocs try/catch en utilisant le nouveau type d'exception Throwable
:
$className = 'SmartForm' . $smartFormIdCode; try { return new $className($smartFormIdCode); } catch (\Throwable $ex) { return new SmartFormNull($smartformIdCode); }
P粉8100506692024-01-04 15:37:51
Parce que c'est une erreur fatale. Utilisez la fonction class_exists() pour vérifier si une classe existe.
Aussi : PHP n'est pas Java - il génère des erreurs sans lever d'exceptions, sauf si vous redéfinissez le gestionnaire d'erreurs par défaut.