PHP代码问题(功能?)

时间:2013-12-01 10:20:16

标签: php

任何人都可以帮我找到这段代码中的问题? 为什么页面仍显示“好”?

<?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";
?>

这个功能有问题吗?

4 个答案:

答案 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";