PHP Profi

Наконец одобрено явное определение скалярных типов для PHP 7

Мы спорили, спорили. И, наконец...утвердили!

Php-сообщество с попкорном и колой давно уже наблюдало за баталиями в RFC по поводу возможности явного определения скалярных типов (int, string, float, bool) для аргументов, а также значений функций в грядущем PHP 7.

Пролилось немало крови, было выдвинуто множество аргументов "за" и "против", но в итоге пришли к тому, что такую полезную штуку, как скалярные типы, будут вводить.

Т.о., напомню, станет возможным явное указание типов аргументов ф-ций:

function add(int $a, int $b): int {
    return $a + $b;
}

var_dump(add(1, 2)); // int(3)
// floats по умолчению приводится к int-у (trunc)
var_dump(add(1.5, 2.5)); // int(3)
 
// string тоже приводится к int-у, если это возможно
var_dump(add("1", "2")); // int(3)

var_dump(add("1 foo", "2")); // int(3)
// Notice: A non well formed numeric value encountered
function foobar(): int {
    return 1.0;
}
 
var_dump(foobar()); // int(1)

Также будет реализована опция жесткой проверки типов (дирректива "declare(strict_types=1")), то есть будет проверяться соответствие типа передаваемого или возвращаемого значения функции, прям как в языках со строгой типизацией.

declare(strict_types=1);

var_dump(add(1, 2)); // int(3)
 
var_dump(add(1.5, 2.5)); // int(3)
// Catchable fatal error: Argument 1 passed to add() must be of the type integer, float given

$foo = substr(52, 1);
// Catchable fatal error: substr() expects parameter 1 to be string, integer given
declare(strict_types=1);
 
function foobar(): int {
    return 1.0;
}
 
var_dump(foobar());
// Catchable fatal error: Return value of foobar() must be of the type integer, float returned

В свете последних принятых RFC PHP 7 выглядит все более и более привлекательным :-)

Продолжаем следить за остальными RFC

2015-03-18

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий