web-dev-qa-db-ja.com

初期化されていない文字列オフセットを報告するphpエラー:0

私はphpで何かをしていますが、デバッグモードではありません。だから私は私たちです

error_reporting(E_ALL);

しかし、文字列の任意の文字にアクセスしようとすると、エラー報告のためにエラーが発生します。

$sentence = "Hello World"; 
$sentence[0]   //Uninitialized string offset: 0

編集:

public static function prepareSentence($sentence)
{
    $sentence = trim($sentence);
    if ($sentence[0] == '"')  //Uninitialized string offset: 0 
        $sentence = substr($sentence, 1, strlen($sentence));

    if ($sentence[strlen($sentence) - 1] == '"')
        $sentence = substr($sentence, 0, -1);

    if ($sentence[0] == '"' || $sentence[strlen($sentence) - 1] == '"')
        return self::prepareSentence($sentence);
    return $sentence;
}

開発モードで作業するにはどうすればよいですか。 error_reporting(E_ALL);が必要です。

前もって感謝します。

12
Elbek

空の文字列の場合、_$sentence[0]_を使用することはできません。これにより、通知が表示されます。

!empty($sentence)を追加して、空かどうかを確認できます。

23
xdazz

$ sentenceを文字列として作成し($ sentence = "Hello World";)、それを配列として呼び出します($ sentence [0])。それはもはや許可されていません。以前はバックグラウンドでサイレントに動作し、そのエラーで変数を配列に変更していましたが、PHP 7.1では完全に失敗します。E_NOTICEエラーとして表示されます(実際にはアップグレードする必要があります) E_DEPRECATEDか何かに、今は失敗しますが、何でも)。

2
Sean