エラーを処理し、エラーコードを指定して適切なエラーメッセージを出力するために、Exceptionクラスの子クラスを作成しようとしています。元のコードを変更して、問題を説明するためだけに簡単にしました。
おそらくそれは不可能ですが、InvalidEmailExceptionクラスがスクリプトによってインスタンス化されることを望んでいません。必要に応じてSubscribeクラスで使用したいだけです(エラーが見つかりました)。とにかくこれをやりたいのはなぜですか?クラスがどのように機能するかを理解しようとしているだけでも構いません。
/* Child class from the parent Exception class to handle errors
* pertinent to users being subscribed
*/
class InvalidEmailException extends Exception{
private $error_code;
private $email;
function __construct($error_code, $email){
$this->error_code = $error_code;
$this->email = $email;
$this->notifyUser();
}
function notifyUser(){
if($this->error_code == 2):
echo "<p>Invalid email: <em>{$this->email}</em></p>";
endif;
}
}
// Initial class to subscribe a user with the try catch checks
class Subscribe{
private $email;
private $error_code = 0;
function __construct($email){
$this->email = $email;
$this->validateEmail();
}
private function validateEmail(){
try{
if($this->email == ''):
throw new Exception('<p>Error: empty email address.</p>');
else:
if($this->email == 'invalid test'){
$this->error_code = 2;
throw new InvalidEmailException($this->error_code, $this->email);
}elseif($this->error_code == 0){
// Go to method to subscribe a user if the error code remains zero
$this->subscribeUser();
}
endif;
}catch(Exception $e){
echo $e->getMessage();
}
}
private function subscribeUser(){
echo $this->email.' added to the database!';
}
}
/*
* Script to use the Subscribe class, which would call
* the InvalidEmailException class if needed
*/
$email = 'invalid test'; // This could later on be used through the $_POST array to take an email from a form
$subscribe = new Subscribe($email); // Works well.
$test = new InvalidEmailException('2', 'a@b.c'); // Also works. I want this to throw an error.