Является ли $ params зарезервированным словом в PHP 7.2? - PullRequest
0 голосов
/ 31 января 2019

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

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: Uncaught Ошибка: невозможно использовать смещение строки в качестве массива в ....

в этой строке: foreach($res as $v)

Благодаря предыдущей отладке я на 100% уверен, что $res является массивом.Теперь вот хитрость: если я изменю переменную с $params на $parames, она будет работать просто отлично.Что еще хуже, эта строка работает нормально: if(is_array($params) && sizeof($params) > 0) и фатальная ошибка выдается на другую строку, где нет ничего общего с $params.

Так что это работает с этим изменением, купить ПОЧЕМУ ???Есть идеи?Может быть, конфиг php.ini?Зарезервированное слово?Я не нашел его в PHP документах.

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 января 2019

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

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

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

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

extract($params);

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

0 голосов
/ 31 января 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...