Сообщение об ошибке 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);

заранее спасибо.


person Elbek    schedule 04.02.2012    source источник
comment
было бы неплохо еще немного кода. Вы раньше использовали переменную предложения?   -  person SoWhat    schedule 04.02.2012
comment
Уверенный мужчина. Я только что редактировал.   -  person Elbek    schedule 04.02.2012
comment
работает нормально: ideone.com/R6y3n   -  person mpen    schedule 04.02.2012
comment
это не должно возвращать никаких ошибок. Можете ли вы дать полный код, по крайней мере, относящийся к этому разделу. Насколько я понимаю, это нормально   -  person SoWhat    schedule 04.02.2012
comment
Когда я повторяю предложение $, оно дает правильную строку.   -  person Elbek    schedule 04.02.2012
comment
Это работает: codepad.org/P67h8NrK Как вы это называете? Я лично проверял, была ли предоставлена ​​действительная строка, и, вероятно, использовал substr() или str_replace().   -  person Jared Farrish    schedule 04.02.2012
comment
str_replace() example`.   -  person Jared Farrish    schedule 04.02.2012
comment
по-прежнему отлично работает ideone.com/ZVUmr   -  person SoWhat    schedule 04.02.2012
comment
А если вы не хотите убирать " в предложении, вы можете использовать trim($sentence, '"')   -  person Jared Farrish    schedule 04.02.2012
comment
Мне нужно было снимать с начала и до конца, а не изнутри. Кстати, есть ли для этого хороший подход?   -  person Elbek    schedule 04.02.2012


Ответы (2)


Для пустой строки вы не можете использовать $sentence[0], это вызовет у вас уведомление.

Вы можете добавить !empty($sentence), чтобы проверить, пусто ли оно.

person xdazz    schedule 04.02.2012
comment
на самом деле я разбирал кучу строк из файла. Значит, файл не был пустым. Было много фрагментов строки, но из-за некоторых пробелов в методе появилась пустая строка и выдала ошибку. Это у меня плохо. Я просто проверил и понял. tx. - person Elbek; 04.02.2012
comment
Проблема с empty в том, что empty (0) также вернет true. - person Ke Vin; 05.08.2014
comment
@KeVin программно 0 и пустой - это разные значения, пустой - отсутствие данных, а ноль - допустимое значение. - person Clain Dsilva; 30.12.2016

Вы создаете предложение $ как строку ($ предложение = "Hello World";), а затем вызываете его как массив ($ предложение [0]). Это больше не разрешено. Раньше он работал в фоновом режиме и менял переменную на массив для вас с этой ошибкой, но с PHP 7.1 он полностью выйдет из строя. Выдается как ошибка E_NOTICE (на самом деле ее следует обновить до E_DEPRECATED или что-то в этом роде, поскольку теперь она не работает, но что-то еще).

person Sean    schedule 17.03.2019