Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А самым ожидаемым будет скалярный тайп-хинт, конечно.Возможно. Хотя у него масса недостатков, к сожалению, например, нельзя указать array|\ArrayObject или float|int.
function test(callable $func = null) {
// …
}
в идеале не должно быть таких функций. функция должна возвращать только один тип данных и кидать exception в случае какого-то сбоя. прошу прощения, что не ответил на ваш вопрос — самому интересно :)
getError() возвращает ошибку если она есть и null если нету.а что если существует элемент со значением null?
students.searchBy( 'name', 'Potapenko Andrew' )
var ability = unit.FindAbility<AttackAbility>();
if (ability == null) {
ShowAlert( CANT_ATTACK );
} else {
ability.activate();
}
array|\ArrayObject
По идее ArrayObject должен подпадать под array, то что сейчас это не так это отдельная история.По идее array должен попадать под \Iterable, но не попадает, примитивный тип, отдельная история, да.
А float|int вообще не имеет никакого смысла. float норм, покрывает собой int. Значит только его и юзать. Сама идея объединения типов нарушает идею тайп хинтинга.Да, float|int бесполезно, признаю́. Объединение типов полезно было бы на стыке примитивов и ООП.
По идее ArrayObject должен подпадать под array, то что сейчас это не так это отдельная история
bolk@MacBook-Pro ~$ /opt/php-7.0a/bin/php -r '$a = function() use(&$a) { $a();}; $a();'
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in Command line code on line 1
class foo { static $bar = 'baz'; }
class baz { static $bat = 'Hello World'; }
baz::$bat = function () { echo "Hello World"; };
$foo = 'foo';
($foo::$bar::$bat)();
Она станет стабильной осенью. А минимальной полностью поддерживаемой версией станет 5.6.
function sendHttpStatus(int $statusCode, string $message) {
header('HTTP/1.0 ' .$statusCode. ' ' .$message);
}
//non-strict
function sendHttpStatus($statusCode, $message) {
$statusCode = (int) $statusCode;
$message = (string) $message;
header('HTTP/1.0 ' .$statusCode. ' ' .$message);
}
//strict
//declare(strict_types=1);
function sendHttpStatus($statusCode, $message) {
if (!is_int($statusCode)) {
throw new InvalidArguments();
}
if (!is_string($message)) {
throw new InvalidArguments();
}
header('HTTP/1.0 ' .$statusCode. ' ' .$message);
}
int или float, придется отказаться от тайпхинта вообще, что явно менее строго, чем int|float.Во-первых, все проверки все равно проходят в рантайме и пока функцию никто не вызвал, невозможно узнать, что она написана или используется неправильно.
Фича действительно получается недоделанной. Во-первых, все проверки все равно проходят в рантайме и пока функцию никто не вызвал, невозможно узнать, что она написана или используется неправильно.
чем при каждом открытии страницы интерпретировать такой же кусок на PHP.
function mysql_query($query, $link){
return mysqli_query($link, $query);
}
(тем более не бесполезное, а используемое большинством клиентов)
А всё равно интерпретатору при вызове скрипта (не важно, надо это или нет) придётся разбирать этот код.
($foo::$bar::$bat)();
Подскажите, пожалуйста, для чего здесь первая пара скобок?
($foo::$bar::$bat)();
(2+2)*4. Сначала получаем значение статической переменной $bat из класса baz, а т.к. она является анонимной функцией, то тут же ее и исполняем. Можно было бы сделать и так:$qux = $foo::$bar::$bat;
$qux();
{} — управляют порядком вычисления?
{$obj->$properties}['name'] — здесь не нужен $ перед фигурной скобкой?
Чего ждать, когда ждешь ребенка: PHP 7, часть 1