Когда «будущий» код, тестируя его на 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.