Квест → Как хакнуть форму
Прошли: 77
Мы спорили, спорили. И, наконец...утвердили!
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