Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多重isset或条件_Php_Isset - Fatal编程技术网

Php 多重isset或条件

Php 多重isset或条件,php,isset,Php,Isset,isset可用于检查多个变量是否全部设置: 如果设置为$var1,$var2,$var3{…} 但是如果我想检查是否设置了任何变量呢 如果isset$var1 | | isset$var2 | | isset$var3{…} 鉴于使用@进行错误抑制被认为是一种不好的做法,有没有更好的方法 函数或集合 { foreach func_get_参数为$arg{ 如果设置为$arg,则返回true; } 返回false; } 如果设置@$var1、@$var2、@$var3{…} 我不完全确定这是否是解

isset可用于检查多个变量是否全部设置:

如果设置为$var1,$var2,$var3{…} 但是如果我想检查是否设置了任何变量呢

如果isset$var1 | | isset$var2 | | isset$var3{…} 鉴于使用@进行错误抑制被认为是一种不好的做法,有没有更好的方法

函数或集合 { foreach func_get_参数为$arg{ 如果设置为$arg,则返回true; } 返回false; } 如果设置@$var1、@$var2、@$var3{…}
我不完全确定这是否是解决这个问题的最佳方法。。。只能将变量名传递给函数,而不能传递变量

//$var1 = 1;
//$var2 = 2;
//$var3 = 3;

function orset()
{
    foreach (func_get_args() as $arg) {       
        global ${$arg};        
        if (isset(${$arg})) {
            return true;
        }
    }

    return false;
}

if (orset('var1', 'var2', 'var3')) {
    echo "ok"; 
}
为什么要抑制错误?将未定义的变量传递给函数会产生一个通知。 如果您忘记了消除错误,您可以使用:

function orset()
{
    foreach (func_get_args() as $arg) {       
        global $arg;        
        if (isset($arg)) {
            return true;
        }
    }

    return false;
}

if (orset($var1, $var2, $var3)) {
    echo "ok"; 
}

当你可以简单地使用if-isset$var1 | | isset$var…..

我不完全确定这是否是最好的方法时,事情就变得复杂了。。。只能将变量名传递给函数,而不能传递变量

//$var1 = 1;
//$var2 = 2;
//$var3 = 3;

function orset()
{
    foreach (func_get_args() as $arg) {       
        global ${$arg};        
        if (isset(${$arg})) {
            return true;
        }
    }

    return false;
}

if (orset('var1', 'var2', 'var3')) {
    echo "ok"; 
}
为什么要抑制错误?将未定义的变量传递给函数会产生一个通知。 如果您忘记了消除错误,您可以使用:

function orset()
{
    foreach (func_get_args() as $arg) {       
        global $arg;        
        if (isset($arg)) {
            return true;
        }
    }

    return false;
}

if (orset($var1, $var2, $var3)) {
    echo "ok"; 
}
如果您可以简单地使用if-isset$var1 | | isset$var…

isset检查一个变量是否为空,同时如果该变量根本不存在,则取消通知,这会使事情变得复杂

没有办法创建一个像isset一样工作的用户定义函数。用户定义的函数只能接受值,不能接受变量。必须在调用方解析该值,因此不存在的变量将始终在那里生成一个通知,并且您的函数无法抑制它。isset是一种语言构造,它更像是一个运算符而不是一个函数,并且无法模仿它在用户代码中的作用。在某些特殊情况下,您可能能够实施一些变通方法,例如使用全局变量,但在其他情况下,这些方法将失败,例如,当您不使用全局变量时

//$var1 = 1;
//$var2 = 2;
//$var3 = 3;

function orset()
{
    foreach (func_get_args() as $arg) {       
        global ${$arg};        
        if (isset(${$arg})) {
            return true;
        }
    }

    return false;
}

if (orset('var1', 'var2', 'var3')) {
    echo "ok"; 
}
从根本上说,你不应该一开始就处理那么多不存在的变量。您的代码完全控制它所创建的变量,因此,如果您定义了变量,则不需要检查它们是否存在。任何动态内容都应作为数组或对象传递,例如,通过$\u GET或$\u POST的用户输入或其他可以作为对象传递的数据结构。然后,您不再讨论isset,而是讨论测试数组中键的存在性,例如,可以简化,例如:

if (array_intersect_key($array, array_flip(['foo', 'bar', 'baz']))) {
    echo 'At least one of those keys was in $array';
}
因此,避免陷入需要首先检查是否设置了某些变量的情况。如果您不可避免地处于这种情况,那么isset | | isset | | |....

isset检查变量是否为空,同时在该变量根本不存在的情况下抑制通知

没有办法创建一个像isset一样工作的用户定义函数。用户定义的函数只能接受值,不能接受变量。必须在调用方解析该值,因此不存在的变量将始终在那里生成一个通知,并且您的函数无法抑制它。isset是一种语言构造,它更像是一个运算符而不是一个函数,并且无法模仿它在用户代码中的作用。在某些特殊情况下,您可能能够实施一些变通方法,例如使用全局变量,但在其他情况下,这些方法将失败,例如,当您不使用全局变量时

//$var1 = 1;
//$var2 = 2;
//$var3 = 3;

function orset()
{
    foreach (func_get_args() as $arg) {       
        global ${$arg};        
        if (isset(${$arg})) {
            return true;
        }
    }

    return false;
}

if (orset('var1', 'var2', 'var3')) {
    echo "ok"; 
}
从根本上说,你不应该一开始就处理那么多不存在的变量。您的代码完全控制它所创建的变量,因此,如果您定义了变量,则不需要检查它们是否存在。任何动态内容都应作为数组或对象传递,例如,通过$\u GET或$\u POST的用户输入或其他可以作为对象传递的数据结构。然后,您不再讨论isset,而是讨论测试数组中键的存在性,例如,可以简化,例如:

if (array_intersect_key($array, array_flip(['foo', 'bar', 'baz']))) {
    echo 'At least one of those keys was in $array';
}

因此,避免陷入需要首先检查是否设置了某些变量的情况。如果你不可避免地会遇到这种情况,那么isset | | isset | | | | | | | | | | | | | | | | | | | | | 124。然而,正如deceze所提到的,这是不可能的,但是这种方法更容易列出所有要检查的变量。但这仍然不是很优雅的方式来实现它,因为没有好的方式来实现它

解决办法是连锁经营。在链的末尾返回null是很重要的,因为这样会显示对不存在的数组元素的通知

$var3 = 'test';
$var4['4'] = false;
$var4['3'] = null;

var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? $var4['4'] ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['3'] ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['5'] ?? null)); //false

我想出了一个新主意,检查是否设置了任何变量。然而,正如deceze所提到的,这是不可能的,但是 他的方法更容易列出所有要检查的变量。但这仍然不是很优雅的方式来实现它,因为没有好的方式来实现它

解决办法是连锁经营。在链的末尾返回null是很重要的,因为这样会显示对不存在的数组元素的通知

$var3 = 'test';
$var4['4'] = false;
$var4['3'] = null;

var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? $var4['4'] ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? $var3 ?? null)); //true
var_dump(!is_null($var1 ?? $var2 ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['3'] ?? null)); //false
var_dump(!is_null($var1 ?? $var2 ?? $var4['5'] ?? null)); //false

如果必须处理变量,则必须使用if-isset$var1 | | isset$var2 | | isset$var3{…}。如果必须处理数组,则可以将键作为参数传递。通常,如果必须对单个变量使用isset,则这是一种代码味道。您确定这正是您需要处理的场景吗?如果您必须处理变量,则必须使用if-isset$var1 | | isset$var2 | | isset$var3{…}。如果必须处理数组,则可以将键作为参数传递。通常,如果必须对单个变量使用isset,则这是一种代码味道。您确定这正是您需要处理的场景吗?如果您在函数作用域中工作,这通常会失败,因为这些变量不是全局变量。如果您接受的通知是可接受的,那么就不需要该函数,类似于array_filter[$var1,$var2,…]的函数也可以。第二个例子坦率地说只是胡说八道;您将这些变量的值传递到函数中,然后尝试在不实际执行的情况下模拟变量全局。如果您在函数范围内工作,这通常会失败,因为这样这些变量就不是全局变量。如果您接受的通知是可接受的,那么就不需要该函数,类似于array_filter[$var1,$var2,…]的函数也可以。第二个例子坦率地说只是胡说八道;您将这些变量的值传递到函数中,然后尝试模拟变量globals之类的东西,而实际上不这样做。