PHP Альтернатива if (! Isset (...)) {...} => GetVar ($ Variable, $ ValueIfNotExists) - PullRequest
0 голосов
/ 08 сентября 2018

Когда я использую переменную в PHP, которой не существует , я получу предупреждение / сообщение об ошибке.

Примечание: неопределенная переменная


Поэтому обычно я пишу оператор if, чтобы сначала его инициализировать.

Пример 1:

if (!isset($MySpecialVariable))
{
  $MySpecialVariable = 0;
}
$MySpecialVariable++;

Пример 2:

if (!isset($MyArray["MySpecialIndex"]))
{
  $MyArray["MySpecialIndex"] = "InitialValue";
}
$Value = $MyArray["MySpecialIndex"];

Недостаток в том, что мне приходится писать $MySpecialVariable или $MyArray["MySpecialIndex"] несколько раз, и программа раздувается.

Как можно добиться того же результата, записав переменную только один раз ?

Я ищу что-то вроде

GetVar($MySpecialVariable, 0); # Sets MySpecialVariable to 0 only if not isset()
$MySpecialVariable++;

$Value = GetVar($MyArray["MySpecialIndex"], "InitialValue");

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Когда вы используете PHP7, вы можете использовать оператор объединения нулей
Как:

$myVar = $myVar ?? 0;
0 голосов
/ 08 сентября 2018
function GetVar(&$MyVar, $ValueIfVarIsNotSet)
{
    $MyVar = (isset($MyVar)) ? $MyVar : $ValueIfVarIsNotSet;
    return $MyVar;
}

Ключ должен передать запрошенную переменную по ссылке (&$MyVar). В противном случае невозможно вызвать функцию с возможно неинициализированной переменной.

Тестовый код:

<code>echo "<pre>";

unset($a);
$b = "ValueForB";
unset($c);
$d = "ValueForD";

echo (isset($a)) ? "a exists" : "a NotSet";
$a = GetVar($a, 7); # $a can be passed even if it is not set here
$a++;
echo "\nValue=$a\n";
echo (isset($a)) ? "a exists" : "a NotSet";
echo "\n\n";

echo (isset($b)) ? "b exists" : "b NotSet";
echo "\nValue=".GetVar($b, "StandardValue2")."\n";
echo (isset($b)) ? "b exists" : "b NotSet";
echo "\n\n";

echo (isset($c)) ? "c exists" : "c NotSet";
echo "\nValue=".GetVar($c, "StandardValue3")."\n";
echo (isset($a)) ? "c exists" : "c NotSet";
echo "\n\n";

echo (isset($d)) ? "d exists" : "d NotSet";
echo "\nValue=".GetVar($d, "StandardValue4")."\n";
echo (isset($d)) ? "d exists" : "d NotSet";
echo "\n\n";

echo "
";

Выход:

NotSet
Значение = 8
существует

б существует
Значение = ValueForB
б существует

c NotSet
Значение = StandardValue3
с существует

d существует
Значение = ValueForD
d существует

...