exit

Terminate the current script with a status code or message

&reftitle.description; `never` `exit` ``string``int```status` 0

Terminates execution of the script. Shutdown functions and object destructors will always be executed even if `exit` is called. However, &finally; blocks are never executed.

An exit code of `0` is used to indicate that the program succeeded in its tasks. Any other value indicates some sort of error occurred during execution.

`exit` is a special function, because it has a dedicated token in the parser, as such it can be used like a statement (i.e. without parentheses) to terminate the script with the default status code.

It is not possible to disable, or create a namespaced function shadowing the global `exit` function.

&reftitle.parameters;

`status`

- If `status` is a string, this function prints the `status` just before exiting. The exit code returned by PHP is `0`.

  If `status` is an `int`, the exit code returned by PHP will be `status`.

  Exit codes should be in the range `0` to `254`, the exit code `255` is reserved by PHP and should not be used.

  Prior to PHP 8.4.0, `exit` did not follow PHP's standard type juggling semantics, nor respect the `strict_types` declare.

  Any value not of type `int` was cast to `string` including `resource` and `array` values. As of PHP 8.4.0, it follows the usual type juggling semantics and throws a TypeError on invalid values.

&reftitle.returnvalues;

As this terminates the PHP script, no value is returned.

&reftitle.changelog;

&Version; | &Description;
8.4.0 | `exit` is now a proper function, therefore it follows the usual type juggling semantics is affected by the `strict_types` declare, can be called with named arguments, and be a variable functions.

&reftitle.examples;

### Basic `exit` example

    <?php

    // exit program normally
    exit();
    exit(0);

    // exit with an error code
    exit(1);

    ?>

### `exit` example with a `string`

    <?php

    $filename = '/path/to/data-file';
    $file = fopen($filename, 'r')
        or exit("unable to open file ($filename)");

    ?>

### Shutdown functions and destructors run regardless

    <?php
    class Foo
    {
        public function __destruct()
        {
            echo 'Destruct: ' . __METHOD__ . '()' . PHP_EOL;
        }
    }

    function shutdown()
    {
        echo 'Shutdown: ' . __FUNCTION__ . '()' . PHP_EOL;
    }

    $foo = new Foo();
    register_shutdown_function('shutdown');

    exit();
    echo 'This will not be output.';
    ?>

&example.outputs;

    Shutdown: shutdown()
    Destruct: Foo::__destruct()

### `exit` as a statement

    <?php

    // exit program normally with exit code 0
    exit;

    ?>

&reftitle.notes;

Prior to PHP 8.4.0, `exit` was a language construct and not a function, therefore it was not possible to call it using variable functions, or named arguments.

&reftitle.seealso;

- `register_shutdown_function`
- Shutdown functions
- object destructors