Intereting Posts
Nginx: WordPress в качестве подкаталога на маршрутах Rails неправильно Удалить повторяющееся значение в многомерном массиве Laravel5 Перенаправить на внешний URL с параметрами PHP Type Hinting: поддерживается массив, объект NOT? Как я могу работать со отношениями «многие ко многим» в Yii2 Функция обратного вызова функции Javascript для php-кода PHP-формат денег с пробелами PHP simplexml xpath ищет значение в ELEMENT, содержащем текст с разделителями табуляции? Как взять текущий URL-адрес в переменную php? Переписать HTTP-запрос GET на POST в Apache с помощью htaccess PHP disable_functions в файле .user.ini дает «нет значения» в выводе phpinfo () Могу ли я использовать phpBB в качестве «поддельного» поставщика идентификации? WordPress Получение данных для Post Grid визуального композитора Синхронные записи файлов PHP PHP: объединение массивов одинаковой длины в многомерный массив, где оба заканчиваются как значения (а не ключи)?

Пустая страница, если я объявляю (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 interface RFC

Fatal error: 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(); 

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

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

    Этот RFC предлагает дополнительно добавить новую необязательную директиву для каждого файла, declare (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(); 

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