Каким образом мой массив индексирует «Недопустимое смещение строки»?

Когда «будущий» код, тестируя его на PHP 5.4, я получаю предупреждение, которое я не понимаю.

function __clone() { $this->changed = TRUE; foreach ($this->conditions as $key => $condition) { if ( $condition['field'] instanceOf QueryConditionInterface) { $this->conditions[$key]['field'] = clone($condition['field']); } } } 

Я вырвал $condition['field'] в свою собственную строку, чтобы уменьшить объем кода, на который нужно сосредоточиться. Об этой конкретной строке, PHP имеет это сказать

Предупреждение: недопустимое 'field' смещение строки 'field' в DatabaseCondition->__clone()

И я просто не вижу, как «поле» является незаконным смещением строки. Я предполагаю, что я просто пропущу что-то очевидное, но если сообщество не может найти проблему, я напишу отчет об ошибке.

Я интерпретирую это предупреждение как « ни при каких обстоятельствах не является полем« действительным ключом ». Эта ошибка имела бы смысл, если бы я попробовал нам, например, массив в качестве ключа.

Предупреждение похоже на его утверждение, что $condition является строкой. Без какого-либо знания кода я не понимаю, имеет ли это смысл.

Не зная о создании массива / iterator условий, я могу только предположить, что вы должны сначала проверить, существует ли смещение.

 if(isset($condition['field']) && $condition['field'] instanceOf QueryConditionInterface) 

Использование isset в этой ситуации достаточно и быстрее, чем array_key_exists, единственное различие заключается в том, что если условие $ [field] равно NULL, iset вернет fall, array_key_exists вернет true, потому что ключ существует. Но поскольку вы хотите работать только с полями, которые являются экземпляром QueryConditionInterface, вы отлично справитесь с isset.