#php
#php
Вопрос:
Я получаю ошибку недопустимого смещения в одной из моих функций.
Вот этот код
public function translate($str, $namespace = '') {
$namespace = $this->getNamespace($namespace);
$this->load($namespace);
$lang = $this->getLang();
$data = $this->data[$namespace];
$key = md5($str);
if (isset($data[$lang][$key])) {
return $data[$lang][$key];
}
$default = $this->getDefaultLang();
if ($lang == $default) {
if ($this->getSaveOnMissing()) {
$save = array(
'namespace' => $namespace,
'lang' => $lang,
'trans_key' => $key,
'trans_val' => $str
);
$sql = $GLOBALS['db']->strInsert('translate', $save);
if ($GLOBALS['db']->SQL_query($sql)) {
$this->data[$namespace][$lang][$key] = $str;
}
}
return $str;
} elseif (isset($data[$default][$key])) {
return $data[$default][$key];
}
return $str;
}
В этой строке я получаю эту ошибку
elseif (isset($data[$default][$key]))
Комментарии:
1. Пожалуйста, покажите точное сообщение об ошибке и как вы вызываете свою функцию.
2. Что
var_dump($data[$default])
показывает?3. Массивы и объекты нельзя использовать в качестве ключей. Это приведет к появлению предупреждения: недопустимый тип смещения ( php.net массивы )
4. @freeek PHP Предупреждение: недопустимый тип смещения в ………. в строке 90 это все
5. Что такое
$lang
и$default
? Может быть, это какой-то тип объекта?
Ответ №1:
Итак, существует 3 уровня вашего значения
- $data
- $default
- $ key
Сначала вы можете проверить на трех уровнях, все ли они что-то возвращают
elseif(isset($data, $data[$default], $data[$default][$key])
Комментарии:
1. В этом нет реальной необходимости. Сингл
isset
с самым глубоким уровнем завершится ошибкой, независимо от того, какой уровень не установлен. См. Скрипку .