有没有PHP的缩写:if(a){var=a}

有没有PHP的缩写:if(a){var=a},php,Php,在PHP中,是否有一种更短或更好的书写方式: If($a){$var=$a} 我的主要目标是: 仅在$a存在时实例化变量($var)。(在现实世界中,$a是一个函数,如果在字符串搜索中找到,则返回一个值) 不要重复提到$a 有两个运营商执行与您所寻找的类似的操作: “速记三元”或“Elvis”运算符,?: “空合并”运算符,?? 两者都是一种“内联if”:$var=$a?:$b表示“如果是真的,则将$var设置为$a,否则设置为$b”$var=$a$b类似,但测试“存在且不为空”而不是“真

在PHP中,是否有一种更短或更好的书写方式:

If($a){$var=$a}

我的主要目标是:

  • 仅在$a存在时实例化变量($var)。(在现实世界中,$a是一个函数,如果在字符串搜索中找到,则返回一个值)
  • 不要重复提到$a

有两个运营商执行与您所寻找的类似的操作:

  • “速记三元”或“Elvis”运算符,
    ?:
  • “空合并”运算符,
    ??
两者都是一种“内联if”:
$var=$a?:$b
表示“如果是真的,则将$var设置为$a,否则设置为$b”<代码>$var=$a$b类似,但测试“存在且不为空”而不是“真实”

还有一个组合赋值运算符
??=
,如果左侧未设置或为null,则该运算符将保持变量不变,因此可以作为提供默认值的一种方式。这与您想要的正好相反,但在许多情况下,您可以编写如下代码:

$blah = somefunc();
$blah ??= $default;
$var = $a;
if (!$var) {
    unset($var);
}
$temp = $a;
if ($temp) {
    $array['a'] = $temp;
}
else {
    unset($temp);
}

PHP不具备显式声明变量的能力(例如,没有
var
关键字或类型声明,如
int$counter;
),因此您编写的确切需求没有语法。在有显式变量声明的语言中,它们是有条件的是没有意义的,因为它们通常是静态检查的(即“在编译时”)。

不存在这样的缩写。但是,您可以完成如下相同的任务:

$blah = somefunc();
$blah ??= $default;
$var = $a;
if (!$var) {
    unset($var);
}
$temp = $a;
if ($temp) {
    $array['a'] = $temp;
}
else {
    unset($temp);
}
如果$var为false(0、“0”、“0”、“null”、“空”或false),则它将被取消设置,就好像它最初没有被实例化一样

编辑:

unset还可用于数组索引,例如:

unset($var['a']);
上面的方法不仅仅是将值设置为null。它会将其设置为null并将其从数组中删除

您可能想要的是这样的:

$blah = somefunc();
$blah ??= $default;
$var = $a;
if (!$var) {
    unset($var);
}
$temp = $a;
if ($temp) {
    $array['a'] = $temp;
}
else {
    unset($temp);
}
您还可以通过以下功能实现所需:

function add_value_if_exists(&$array, $key, $value) {
    if ($value) {
        $array[$key] = $value;
    }
}

add_value_if_exists($array, 'a', $a);

在上面的示例中,只有当$a是真实的时,$array才会被修改。

变量应该无条件存在,只需使用默认值即可。如果你牢记这一点,那么像
$var=$a?:$var
这样的东西就可以了。你是说像
??
空合并操作符这样的东西吗?你正在寻找像
$var???=$a返回到手头的问题。。。。非常感谢您的回复,谢谢。但是,对我来说重要的是,只有在$a存在时才声明变量。假设$var是一个数组,如果$a存在,我只需要给它分配一个键($var[“a”])。如果我重复所描述的方法,我可能会得到一个包含大量已定义键但具有空值的数组。在理想情况下,我需要保持数组干净,只定义必要的键。您的问题没有提到数组,因此没有人为它们提供解决方案也就不足为奇了。正如原始问题中规定的,现在为了反映此示例而进行了扩充;我不想声明“blah”,除非“somefunc()”返回true。谢谢大家的输入。我一直在盘旋于仅仅为此目的编写一个方法或函数的想法,似乎这将是最好的解决方案。非常感谢。