Vor kurzem habe ich PHP 7 getestet, insbesondere die Rückgabetypdeklaration und Typhinweis . Ich habe PHP 7 aus der Quelle (Master-Zweig von Github ) kompiliert und in der virtuellen Box Ubuntu 14.04 ausgeführt. Ich habe versucht, folgenden Code auszuführen, um einen Test für neue Ausnahmen zu erhalten. Aber es gab eine leere Seite.
%Vor% Dann merke ich, dass ich den Fehler einstellen muss, um auf dem Bildschirm angezeigt zu werden. Also habe ich altmodisch ini_set('display_errors', 1);
wie unten hinzugefügt,
das gab mir folgende TypeError
wie erwartet nach dieser Throwable Schnittstelle RFC
Fataler Fehler: Uncaught TypeError: Rückgabewert von test () muss der sein Geben Sie string ein, das Array wurde in /usr/share/nginx/html/test.php online zurückgegeben 7 in /usr/share/nginx/html/test.php:7 Stapelspur: # 0 /usr/share/nginx/html/test.php(10): test () # 1 {main} geworfen /usr/share/nginx/html/test.php in Zeile 7
Digging weiter Ich habe declare(strict_types=1);
oben wie unten hinzugefügt,
und bang, der Fehler ist einfach verschwunden und hat mich mit der leeren Seite verlassen. Ich kann nicht herausfinden, warum es mir eine leere Seite gibt?
Nachdem ich die Google und RFCs durchsucht hatte, kam ich zu folgendem Satz in RFC ,
Dieser RFC schlägt außerdem das Hinzufügen einer neuen optionalen pro-Datei vor Direktive, deklarieren (strict_types = 1) ;, die alle Funktionsaufrufe durchführt und Rückgabebefehle innerhalb einer Datei haben eine "strikte" Typüberprüfung Skalar-Typ-Deklarationen, einschließlich für Erweiterung und integriertes PHP Funktionen.
Das bedeutet, dass mit Direktive declare(strict_types=1)
nichts falsch ist, aber das Problem war, wie ich ini_set()
function aufgerufen habe. Er erwartet, dass der zweite Parameter vom Typ string
ist.
Ich habe stattdessen int
übergeben, und daher konnte die Einstellung, die zur Anzeige von Fehlern benötigt wird, nicht gesetzt werden und daher wurde ich getroffen
mit einer leeren Seite von PHP strict mode. Ich habe dann den Code ein bisschen geändert und die Zeichenfolge "1"
wie unten übergeben und es hat funktioniert.