PHP Typehinting schon heute

Ein Traum!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function exampleString(string $string) {
    echo "'$string' is a string!\n";
}

function exampleInt(int $int) {
    echo "$int is an int!\n";
}

function exampleFloat(float $float) {
    echo "$float is a float!\n";
}

function exampleBool(bool $bool) {
    var_export($bool);
    echo " is a bool!\n";
}

exampleString("Hello World!"); //'Hello World!' is a string!
exampleInt(1); //1 is an int!
exampleFloat(1.2); //1.2 is a float!
exampleBool(false); //false is a bool!

exampleBool("not really bool");
/*
Catchable fatal error: Argument 1 passed to exampleBool() must be an instance of Bool, string given, called in D:\xampp\htdocs\typehint\example.php on line 23 and defined in D:\xampp\htdocs\typehint\example.php on line 13
*/

Und das alles gibts nicht erst in 3 Jahren sondern bereits heute! Tada! Leider – ihr habts geahnt – hat die Sache einen gehörigen Haken. Erstmal dass ich mich mit

1
require_once 'typehintclass.lib.php';

rumschlagen muss und zweitens (viel schlimmer) – das Ganze ist logischerweise kein valides PHP und erzeugt einen Error. Die typehint-lib bringt also einen eigenen Errorhandler mit, der auf fürchterlich unperformante und hässliche Weise den Fehler auseinandernimmt und dann entweder failed oder (wenn Typ korrekt war) den Fehler unter den Tisch kehrt und weitermacht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) {
    if ($errno == E_RECOVERABLE_ERROR) {
        if ($parsedError = $this->parseErrorString($errstr)) {
            $backtrace = debug_backtrace();
            $value = @$backtrace[1]['args'][$parsedError['argnum']-1];
            if ($this->solveTypeHintFailure($parsedError['typehint'], $value)) {
                return;
            }
        }
    }
    if ($this->oldErrorHandler) {
        return call_user_func($this->oldErrorHandler, $errno, $errstr, $errfile, $errline, $errcontext);
    } else {
        return false;
    }
}

Tja, anders gehts leider nicht. Aber wär schön gewesen.

Weitere Posts:

Dieser Beitrag wurde unter php, webdev veröffentlicht. Setze ein Lesezeichen auf den Permalink.

2 Antworten auf PHP Typehinting schon heute

  1. PHPLehrling sagt:

    Man kann dieses aber schon auf Klassen und Interfaces abwälzen und somit Voraussetzen das der übergebene Parameter von der Klasse oder dem Interface ableiten muss.

  2. Benjamin sagt:

    Es funktioniert auch bei Arrays ala “array $arrValues”. Ich wünsche mir leider schon zu lange ein Typsicheres PHP :(

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>