строгий — пустая страница, если я объявлю (strict_types = 1); в PHP 7 вверху файла

Недавно я проверял на PHP 7, в частности, декларация возвращаемого типа а также тип подсказки. Я скомпилировал PHP 7 из источника (главная ветка из Github) и запустив его в виртуальной коробке Ubuntu 14.04. Я попытался запустить следующий код, чтобы получить тест нового Исключения. Но это дало пустую страницу.

<?php

function test(): string {

return [];
}

echo test();

Затем я понимаю, что должен установить ошибку, которая будет отображаться на экране. Поэтому я добавил старомодный ini_set('display_errors', 1); как ниже,

<?php
ini_set('display_errors', 1);

function test(): string {

return [];
}

echo test();

это дало мне следующий TypeError как и ожидалось в соответствии с этим Интерфейс Throwable RFC

Фатальная ошибка: Uncaught TypeError: Возвращаемое значение test () должно быть
введите строку, массив, возвращенный в /usr/share/nginx/html/test.php на линии
7 в /usr/share/nginx/html/test.php:7 Трассировка стека: # 0
/usr/share/nginx/html/test.php(10): добавлено test () # 1 {main}
/usr/share/nginx/html/test.php в строке 7

Копая дальше я добавил declare(strict_types=1); вверху, как показано ниже,

<?php declare(strict_types=1);

ini_set('display_errors', 1);

function test(): string {

return [];
}

echo test();

и взрыв, ошибка просто исчезла, оставив меня с пустой страницей. Я не могу понять, почему это дает мне пустую страницу?

9

Решение

После поиска в Google и RFC я пришел к следующему предложению в RFC,

В этом RFC также предлагается добавить новый необязательный файл
директива объявляет (strict_types = 1); делает все вызовы функций
и операторы return в файле имеют «строгую» проверку типов для
объявления скалярных типов, в том числе для расширения и встроенного PHP
функции.

Это означает, что с директивой все в порядке declare(strict_types=1) но проблема была в том, как я звонил ini_set() функция. Ожидается, что второй параметр string тип.

string ini_set ( string $varname , string $newvalue )

Я проходил int вместо этого, и, следовательно, настройки, необходимые для отображения ошибок, не удалось установить, и, следовательно, меня ударили
с пустой страницей строгим режимом PHP. Затем я немного изменил код и передал строку "1" как ниже, и это сработало.

<?php declare(strict_types=1);

ini_set('display_errors', "1");

function test(): string {

return [];
}

echo test();
17

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

так как ошибка гласит, ваша функция ожидает, что вы вернете строку, но вместо этого вы вернете массив! И функция жалуется, что нормально. Так что по вашему возвращению просто поместите некоторое строковое значение. Это оно!

0

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