当通过在 PHP 5.4 上测试“面向 future ”的代码时,我收到一条我不理解的警告。
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 有这样的说法
Warning: Illegal string offset
'field'
inDatabaseCondition->__clone()
而且我只是看不出“字段”是非法的字符串偏移量。我猜我只是遗漏了一些明显的东西,但如果社区找不到问题,我会提交错误报告。
我将警告解释为“在任何情况下‘字段’都不是有效的键”。如果我曾尝试将数组作为键,那么这个错误是有道理的。
最佳答案
在没有更多关于创建条件数组/迭代器的知识的情况下,我只能假设您应该首先检查偏移量是否存在。
if(isset($condition['field']) && $condition['field'] instanceOf QueryConditionInterface)
在这种情况下使用 isset 就足够了,而且比 array_key_exists 更快,唯一的区别是,如果 $condition['field'] 为 NULL isset 将返回 falls,array_key_exists 将返回 true,因为 key 存在。但是因为您只想处理作为 QueryConditionInterface 实例的字段,所以您可以使用 isset 正常运行。
关于php - 我的数组索引以何种方式为 'Illegal string offset' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335470/