任何人都可以帮我找到这段代码中的问题? 为什么页面仍显示“好”?
<?php
$badinput=false;
function check($arg1,$arg2)
{
if(($arg1<0)||($arg1>100))
{
$badinput=true;
}
if(strlen($arg2)>32)
{
$badinput=true;
}
}
$val=999.99;
$name="asdasdasdasdasdasdasdkjlqjwjejqoipjopoajsopjopqjwpdojqpowdqwdasdasd";
check($val,$name);
if(!$badinput)
echo "Good";
else
echo "Bad input";
?>
这个功能有问题吗?
答案 0 :(得分:2)
<?php
function check($arg1,$arg2)
{
if(($arg1<0)||($arg1>100) || strlen($arg2)>32)
{
return true;
}else{
return false;
}
}
$val=999.99;
$name="asdasdasdasdasdasdasdkjlqjwjejqoipjopoajsopjopqjwpdojqpowdqwdasdasd";
if(!check($val,$name))
echo "Good";
else
echo "Bad input";
?>
在这种情况下,不需要使用任何变量或变量范围
现在让我试着解释你的问题
在第一行
$badinput=false;
在函数之外
当您在函数中将变量设置为true
时,变量范围仅限于该函数。所以它不会改变$badinput
值,这是在函数之外。所以即使在调用函数之后,变量值仍为false
,因为它不受函数的影响
因此,$(!badinput)
始终返回true
答案 1 :(得分:1)
您正在遇到范围问题..
做这样的事情
$badinput=check($val,$name);
在此上下文中无需使用 global
关键字。
只需像这样重写你的代码..
<?php
$badinput=false;
function check($arg1,$arg2)
{
if(($arg1<0)||($arg1>100))
{
return true;
}
if(strlen($arg2)>32)
{
return true;
}
}
$val=999.99;
$name="asdasdasdasdasdasdasdkjlqjwjejqoipjopoajsopjopqjwpdojqpowdqwdasdasd";
$badinput=check($val,$name); // Now the result of the function will be assigned to $badinput variable
if(!$badinput)
echo "Good";
else
echo "Bad input";
?>
答案 2 :(得分:1)
您的代码未返回任何变量,因为$badinput
变量在函数中是私有的。以下是如何使其工作,你应该完全使用return语句。
function check($arg1,$arg2)
{
if(($arg1<0)||($arg1>100))
{
$badinput=true;
}
if(strlen($arg2)>32)
{
$badinput=true;
}
else {
$badinput=false;
}
return $badinput;
}
$val=999.99;
$name="asdasdasdasdasdasdasdkjlqjwjejqoipjopoajsopjopqjwpdojqpowdqwdasdasd";
if(!check($val,$name))
echo "Good";
else
echo "Bad input";
答案 3 :(得分:0)
因为$badinput
函数中的check
是局部变量。您需要在函数的开头添加global $badinput;
或者返回此函数:
function check($arg1,$arg2)
{
global $badinput;
if(($arg1<0)||($arg1>100)) {
$badinput=true;
}
if(strlen($arg2)>32) {
$badinput=true;
}
}
更好的解决方案是:
function check($arg1,$arg2) {
$badinput = false;
if($arg1 < 0 || $arg1 > 100) {
$badinput=true;
}
if(strlen($arg2) > 32) {
$badinput=true;
}
return $badinput;
}
// get result
$badinput = check($val,$name);
if(!$badinput)
echo "Good";
else
echo "Bad input";