Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: Stop class execution without terminating the script (Or includes)

Tags:

php

class

In the class below, I need kill() to end whatever is going on within the class and just stop all and any processes WITHIN the class, not the script:

<?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!!!';
?>
like image 803
Omar Avatar asked Feb 05 '13 21:02

Omar


People also ask

How do I stop a PHP script from execution?

The exit() function in PHP is an inbuilt function which is used to output a message and terminate the current script. The exit() function only terminates the execution of the script.

Which of the following function is used to terminate the script execution in PHP?

exit(): The function terminates the execution of a script.

How do I exit PHP in terminal?

You have to type ctrl + C to exit. Save this answer. Show activity on this post.


2 Answers

As answered above in a comment, try to use "try" and "catch" blocks.

Change the "validate" method

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

Outside the class:

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

For more info about exception see:

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

like image 190
Robin Drost Avatar answered Oct 27 '22 01:10

Robin Drost


Instead of self::kill(); simply use return;

If you need kill to do other stuff then simply use return self::kill(); whenever you need to call it and change kill to:

private function kill() {
    doStuff();
    return;
}
like image 45
Adam Brett Avatar answered Oct 27 '22 00:10

Adam Brett