Предупреждение PHP: Недопустимое смещение строки 'all'

Это также полезно, если вы хотите повторно инициализировать глобальные или статически распределенные структуры.

Старый способ C использовал memset() для установки всех элементов на 0. Вы не можете сделать это на C ++ из-за vtables и конструкторов пользовательских объектов.

Поэтому я иногда использую следующие

 static Mystruct m;

 for(...)  {
     // re-initialize the structure. Note the use of placement new
     // and the extra parenthesis after Mystruct to force initialization.
     new (&m) Mystruct();

     // do-some work that modifies m's content.
 }
-1
задан karel 6 March 2019 в 05:42
поделиться

2 ответа

Проблема в том, что хотя

$options['categories']

является действительным

$options['categories']['all']

нет.

Изменение вашей линии на

$all_categories = isset($options['categories']) && 
                  isset($options['categories']['all']) && 
                  $options['categories']['all'] ? true : false;

Подавит вашу ошибку и вернет FALSE. (перевод строки добавлен только для ясности и может быть удален)

0
ответ дан Jc Nolan 6 March 2019 в 05:42
поделиться

Если вы просто пытаетесь увидеть, существует ли $options['categories']['all'] и есть ли в нем что-то, код можно упростить до:

$all_categories = !empty($options['categories']['all']);

Вам не нужно проверять, является ли $options['categories'] set, потому что если установлено
$options['categories']['all'], то массив, который его содержит, должен быть установлен. И троичный, который возвращает true для истинной части и false для ложной части, добавляет ненужную сложность. Выражение перед ? уже дает вам нужное логическое значение.

0
ответ дан Don't Panic 6 March 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: