Maison  >  Questions et réponses  >  le corps du texte

Titre reformulé : Pourquoi PHP ne gère-t-il pas les erreurs « classe introuvable » ?

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();
?>

Solution :

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粉475126941P粉475126941313 Il y a quelques jours461

répondre à tous(2)je répondrai

  • P粉680000555

    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);
    }

    répondre
    0
  • P粉810050669

    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.

    répondre
    0
  • Annulerrépondre