стандарты — неявное возвращение пустоты в PHP 7.1?

Я нашел здесь новую спецификацию: https://wiki.php.net/rfc/void_return_type

function lacks_return(): void {
// valid
}
function returns_nothing(): void {
return; // valid
}
function returns_void(): void {
return void; // valid
}

Спросите: знаете ли вы, что происходит за сценой? Будет ли lacks_return функция возврата на самом деле void?

2

Решение

Вы могли бы проверить это сами довольно легко:

function lacks_return(): void {
}

function returns_nothing(): void {
return;
}

echo gettype(lacks_return()); // NULL
echo gettype(returns_nothing()); // NULL

Таким образом, ответ — да — есть неявный пустой (нулевой) возврат, так что вы можете либо использовать пустой возврат, либо пропустить его полностью. Какой вид имеет смысл — возвращать ничего не значит ничего не возвращать?

4

Другие решения

За кулисами PHP проверяет return заявления в void функции и, если они указывают возвращаемое значение, выдает ошибку времени компиляции:

/* `return ...;` is illegal in a void function (but `return;` isn't) */
if (return_info->type_hint == IS_VOID) {
if (expr) {
if (expr->op_type == IS_CONST && Z_TYPE(expr->u.constant) == IS_NULL) {
zend_error_noreturn(E_COMPILE_ERROR,
"A void function must not return a value ""(did you mean \"return;\" instead of \"return null;\"?)");
} else {
zend_error_noreturn(E_COMPILE_ERROR, "A void function must not return a value");
}
}
/* we don't need run-time check */
return;
}

В противном случае, сборник void функции работают как обычно. return без значения неявно возвращает NULL:

if (!expr_ast) {
expr_node.op_type = IS_CONST;
ZVAL_NULL(&expr_node.u.constant);

И каждая функция составлен с неявным return в конце:

zend_emit_final_return(0);

Чье возвращаемое значение NULL:

zn.op_type = IS_CONST;
if (return_one) {
ZVAL_LONG(&zn.u.constant, 1);
} else {
ZVAL_NULL(&zn.u.constant);
}
5

По вопросам рекламы [email protected]