Typisierung in PHP

Alexander Bogomolov / @abogomolov

Skalare Typen

Boolean

var_dump((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)

function myFunction(bool $var): bool {}

Integer

echo (int) false;                 // 0
echo (int) true;                  // 1
echo (int) array();               // 0
echo (int) array('foo');          // 1
echo (int) "10.5";                // 10
echo (int) "bob3";                // 0
echo (int) "10 Small Pigs";       // 10
echo (int) "10.2 Little Piggies"; // 10

function myFunction(int $var): int {}

Fließkomma-Zahl

echo (float) false;                 // 0
echo (float) true;                  // 1
echo (float) array();               // 0
echo (float) array('foo');          // 1
echo (float) "10.5";                // 10.5
echo (float) "bob3";                // 0
echo (float) "10 Small Pigs";       // 10
echo (float) "10.2 Little Piggies"; // 10.2

function myFunction(float $var): float {}

String

$foo = 'eos';

echo 'Hallo $foo';      // Hallo $foo
echo "Hallo $foo";      // Hallo eos
echo "Hallo {$foo}";    // Hallo eos

$text = <<<EOT
    Hallo $foo
EOT;

echo $text; // Hallo eos

function myFunction(string $var): string {}

Zusammengesetzte Typen

Array

$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// seit PHP 5.4
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

function myFunction(array $var): array {}

Array-Keys

$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array);

// array(1) {
//     [1]=>
//     string(1) "d"
// }

Objekt


function myFunction(\stdClass $var): \stdClass {}

Callable

function test(callable $var): callable {
    return \Closure::fromCallable('intval');
}

$intval = test(function () {
});

echo $intval('123 Test'); // 123

Spezielle Typen

Ressource

function test($res): bool {
    return is_resource($res);
}

NULL

$foo = NULL;    // NULL
$bar;           // NULL

$baz = 'Hallo';
unset($baz);    // NULL

function test(?string $var): ?string {
    return NULL;
}

var_dump(test(NULL)); // NULL

Fragen?

Vielen Dank!