Php 多重isset或条件
isset可用于检查多个变量是否全部设置: 如果设置为$var1,$var2,$var3{…} 但是如果我想检查是否设置了任何变量呢 如果isset$var1 | | isset$var2 | | isset$var3{…} 鉴于使用@进行错误抑制被认为是一种不好的做法,有没有更好的方法 函数或集合 { foreach func_get_参数为$arg{ 如果设置为$arg,则返回true; } 返回false; } 如果设置@$var1、@$var2、@$var3{…}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{…} 我不完全确定这是否是解
我不完全确定这是否是解决这个问题的最佳方法。。。只能将变量名传递给函数,而不能传递变量
//$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之类的东西,而实际上不这样做。