9

最近、私は PHP 7 を調べていました。具体的には、型宣言型ヒントを返します。ソース ( Githubの master ブランチ) から PHP 7 をコンパイルし、Ubuntu 14.04 仮想ボックスで実行しました。新しいExceptionsのテストを取得するために、次のコードを実行しようとしました。しかし、それは空白のページを与えました。

<?php

function test(): string {

    return [];
}

echo test();

次に、エラーを画面に表示するように設定する必要があることに気付きました。ini_set('display_errors', 1);だから私は以下のように昔ながらを追加しました、

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

function test(): string {

    return [];
}

echo test();

このThrowable interface RFCTypeErrorに従って、期待どおりにフォローしてくれました

致命的なエラー: 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} が 7 行目の /usr/share/nginx/html/test.php でスローされました

declare(strict_types=1);さらに掘り下げて、以下のように上部に追加しました。

<?php declare(strict_types=1);

ini_set('display_errors', 1);

function test(): string {

    return [];
}

echo test();

そしてバング、エラーが消えて空白のページが残りました。空白のページが表示される理由がわかりませんか?

4

2 に答える 2

20

Google と RFC を検索した後、 RFCの次の文にたどり着きました。

この RFC はさらに、新しいオプションのファイルごとのディレクティブ、declare(strict_types=1); を追加することを提案しています。組み込み PHP 関数。

これは、ディレクティブに問題がなかったことを意味しますが、問題は関数declare(strict_types=1)を呼び出す方法でした。ini_set()2 番目のパラメーターが型であることが期待されます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();
于 2015-07-19T12:30:04.843 に答える