isset — передает переменную, которая не установлена ​​в функции PHP

Я получаю много массива от некоторого API, и мне нужно проверить, существует ли какая-то переменная или нет.

У меня есть много блоков, которые выглядят так:

if (isset($var))
$varToSet = $var;
else
$varToSet = '';

Поэтому я решил сделать функцию для этого. Я пришел с этим:

function setVar($var)
{
if (isset($var))
return $var;
return '';
}

Но, как я и ожидал, я получил ошибку Undefined variableЯ понял, что мне нужно передать аргумент по ссылке, чтобы получить следующий прототип:

function setVar(&$var);

И до сих пор это работало отлично, вот пример моей проблемы:

// works fine
$var = "test";
$varToSet = setVar($var);

// works fine
$var = "test";
$varToSet = setVar($doesNotExist);

// works fine
$var = "test";
$varToSet = setVar($doesNotExist['index']);

// doesn't work
$var = "test";
$varToSet = setVar($var['index']);

В последнем примере я получаю Illegal string offset 'index а также Only variables can be passed by reference Ошибки PHP.
Я знаю, почему я получил эти ошибки, я просто не могу понять, как преодолеть эту проблему.

0

Решение

я в основном использую property_exists, чтобы проверить, существует ли значение в объекте json.

function getFromJson($json,$value)
{
if (property_exists(json, $value)) {
return $json->$value;
}
return null;
}

function get($var,$value = null)
{
if (is_null($value)) {
return $var;
}
if (is_object($var) && property_exists($var, $value)) {
return $json->$value;
}
if (is_array($var)) {
return $var[$value];
}
return $var;
}
0

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

Ошибка дает вам ответ. Ваша переменная является строкой. Но вы пытаетесь получить доступ к элементу массива, используя скобки [].

И второе вызвано неправильной ссылкой.

Это проходит по ссылке:

$variable = 'test';
myFunction($variable);

и это проходит по значению:

myFunction('test');

Это большая разница!

Вы не можете вызвать строку как массив

$varToSet = setVar($var['index']);

Вы можете изменить строку на:

echo $var['index'];

и у вас все равно будет та же ошибка / предупреждение.
Если вы хотите проверить, установлена ​​ли переменная массива, используйте

isset($var['index'])

но он возвращает значение, а не ссылку

0

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