Dalam contoh di bawah, saya ingin menangkap ralat dan mencipta kelas Null
jika kelas itu tidak wujud.
Tetapi walaupun kenyataan cuba/tangkap saya, PHP hanya memberitahu saya 未找到 'SmartFormasdfasdf' 类
.
Bagaimana untuk membuat PHP menangkap ralat "Kelas Tidak Ditemui"?
<?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(); ?>
Terima kasih @Mchl, beginilah cara saya menyelesaikannya:
public static function create($smartFormIdCode) { $className = 'SmartForm' . $smartFormIdCode; if(class_exists($className)) { return new $className($smartFormIdCode); } else { return new SmartFormNull($smartFormIdCode); } }
Soalan lama, tetapi dalam PHP7 ini adalah pengecualian yang boleh ditangkap. Walaupun saya masih fikir class_exists($class) ialah pendekatan yang lebih eksplisit. Walau bagaimanapun, anda boleh melaksanakan blok cuba/tangkap menggunakan
Throwable
jenis pengecualian baharu:Kerana ini adalah kesilapan yang membawa maut. Gunakan fungsi class_exists() untuk menyemak sama ada kelas wujud.
Juga: PHP bukan Java - ia menimbulkan ralat tanpa membuang pengecualian melainkan anda mentakrifkan semula pengendali ralat lalai.