параметры — Является ли $ params зарезервированным словом в PHP 7.2?

Я только что переселился, и что-то меня удивило. У меня есть эта функция внутри класса:

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 документах.

Спасибо

-1

Решение

Почти все зарезервированные слова в 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,

0

Другие решения

Сообщение об ошибке не имеет ничего общего с $ params и не имеет ничего общего с $ res, который вы передаете в виде массива для foreach в этой строке. Очевидно, getEnums возвращает строку или, по крайней мере, не массив.

РЕДАКТИРОВАТЬ: Кроме того, если это предназначено для импорта элементов $ params в таблицу символов (то есть, когда ключи массива становятся именами переменных):

foreach($params as $var => $newValue)
{
$$var = $newValue;
}

… это может быть записано более просто как:

extract($params);

http://php.net/manual/en/function.extract.php

0

По вопросам рекламы [email protected]