PHP:停止类执行而不终止脚本(或包括)

Oma*_*mar 5 php class

在下面的类中,我需要kill()来结束类中正在发生的事情,并且只停止所有和任何进程在类中,而不是脚本:

<?php
class email {
    //Expressions
    const exp_name      = "/^[A-Za-z .'-]+$/";
    const exp_email     = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
    const error         = "We are sorry, but there appears to be a problem with the form you submitted.<br/>";
    private $msg        = 'Thank you for subscribing';
    protected $status   = true;


    function __construct() {
        self::validate();
        echo '<br/>the CLASS continued</b><br/>';
    }


    private function validate() {
        //Empty fields
        foreach ($_REQUEST as $key => $value) {
            $val = str_replace( ' ', '', $value );
            if ( $val === '' ) {
                self::error( 'empty', $key );
                self::kill(); //If empty, this should end the loop and class
            } //if:empty
        } //foreach


        //Validate Name
        if( !preg_match(self::exp_name,$_POST['Name']) ) {
            self::error( 'name' );
            self::kill(); //kill


        //Validate e-Mail
        if( !preg_match(self::exp_email,$_POST['e-Mail']) ) {
            self::error( 'email' );
            self::kill(); //kill
        }
  }


    public function status() {
        return $this->status;
    }

    public function msg() {
        return $this->msg;
    }


    private function error( $type = null, $value = null ) {
        switch( $type ) {
            case 'empty':
            $this->msg = self::error . "<div class='error'><b>The following field is empty: </b>" . $value . "</div>";
            self::set( false );
            break;

            case 'name':
            $this->msg = self::error . "<div class='error'><b>The First Name you entered does not appear to be valid.</b></div>";
            self::set( false );
            break;

            case 'email':
            $this->msg = self::error . "<div class='error'><b>The e-Mail you entered does not appear to be valid.</b></div>";
            self::set( false );
            break;

            default:
            self::set( false );
            $this->msg = self::error;
        }
    return; //kill app
    }


    private function set( $boolean = false ) {
        $this->status = $boolean;
    }


    private function kill() {
        //die();
        //exit( $this );
        //exit();
        //return;
        //break;
    }
}


$email = new email();
echo $email->msg();
echo '<br/>';
echo '<br/>';
echo 'The script continued!!!';
?>
Run Code Online (Sandbox Code Playgroud)

小智 10

如上面评论中所述,尝试使用"try"和"catch"块.

更改"验证"方法

private function valdidate( $type = null, $value = null ) {
    // Anything that is going wrong:
    throw new Exception("Your error message");
}
Run Code Online (Sandbox Code Playgroud)

课外:

try {
      $mail = new email();
} catch (Exception $e) {
      echo $e->getMessage(); // Handle the message properly here.
}
Run Code Online (Sandbox Code Playgroud)

有关异常的更多信息,请参阅:

http://php.net/manual/en/language.exceptions.php