Я только что переселился, и что-то меня удивило. У меня есть эта функция внутри класса:
function selectEnums($name,$table,$filed, $params = '')
{
$fieldName = $name. $this->name;
if(is_array($params) && sizeof($params) > 0)
{
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
}
$res = $this->getEnums($table,$field, $this->db);
$this->debug('res after getEnums');
$this->debug($res);
$params['options'] = array();
foreach($res as $v)
{
$params['options'][] = $v;
}
.....
}
Теперь я получаю:
Неустранимая ошибка PHP: фатальная ошибка: невозможно использовать смещение строки в качестве массива
в ….
на этой линии: foreach($res as $v)
Благодаря предыдущей отладке я на 100% уверен, что $res
это массив. Теперь вот хитрость: если я изменю переменную из $params
в $parames
, это работает просто отлично. Что еще хуже, эта строка отлично работает: if(is_array($params) && sizeof($params) > 0)
и фатальная ошибка выдается на другую строку, где нет ничего общего с $params
,
Так что работает с этим изменением, купить ПОЧЕМУ ??? Есть идеи? Может быть, конфиг php.ini? Зарезервированное слово? Я не нашел его в PHP документах.
Спасибо
Почти все зарезервированные слова в PHP
не начинается с $
знак, а скорее они определены без начального знака и должны быть написаны с большой буквы. например
const MY_RESERVE_WORD = value;
или с
define(MY_RESERVE_WORD, value);
Так что нет такого зарезервированного слова params
как вы можете проверить следующий код на PHP Fiddle
$params = [1, 2, 2];
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
возможно $params
определяется как constant
в любом из lib/framework
ты используешь.
Надеюсь, что это проясняет идею констант в PHP
,
Сообщение об ошибке не имеет ничего общего с $ params и не имеет ничего общего с $ res, который вы передаете в виде массива для foreach в этой строке. Очевидно, getEnums возвращает строку или, по крайней мере, не массив.
РЕДАКТИРОВАТЬ: Кроме того, если это предназначено для импорта элементов $ params в таблицу символов (то есть, когда ключи массива становятся именами переменных):
foreach($params as $var => $newValue)
{
$$var = $newValue;
}
… это может быть записано более просто как:
extract($params);