PHP数组返回错误的值

PHP数组返回错误的值,php,arrays,if-statement,return,return-value,Php,Arrays,If Statement,Return,Return Value,现在,$num这里只是来自数据库搜索的数据行数。有时,它将是0$拖延是一个函数参数 if ($num==0) { return "Do not appear to be registered. Please check your email input again."; break 1; } else { // there is an entry. check for consistency $procrastinateDB = mysql_result($result,

现在,$num这里只是来自数据库搜索的数据行数。有时,它将是0$拖延是一个函数参数

if ($num==0) {
    return "Do not appear to be registered. Please check your email input again.";
    break 1;
} else { // there is an entry. check for consistency
    $procrastinateDB = mysql_result($result,0,'procrastinate');
    if ($procrastinate != $procrastinateDB) {
        return "Answer to your procrastination question is incorrect. Please try again!";
        break 2;
    }
    else {
        $username = mysql_result($result,0,'usrname');
        $passwd = mysql_result($result,0,'passwd');
        return array($username, $passwd, $num);
        break 2;
    }
}
我不理解的是,即使$num=0,数组仍然返回$usersname='D'、$passwd='o'和$num=''。显然,它使用第一个返回的语句,并按照顺序将这些变量分配给第一个返回语句中的每个字符


我该怎么阻止这一切?如果没有数据库条目,我不希望$username、$passwd、$num包含任何值。

有关代码的一些注释:

  • 您不需要在
    返回后
    中断
  • break
    在PHP中不适用于
    if
  • 如果已经在使用
    return
    ,则不需要执行
    else
我对您的代码做了一些更改,以使其更加可见,并降低了圈复杂度。这可能有助于您更容易发现错误:

function unnamed(/* ... unknown parameters ... */)
{
    /* ... some code ... */
    if ($num==0)
    {
        return "Do not appear to be registered. Please check your email input again.";
    }

    // there is an entry. check for consistency
    $procrastinateDB = mysql_result($result,0,'procrastinate');
    if ($procrastinate != $procrastinateDB)
    {
        return "Answer to your procrastination question is incorrect. Please try again!";
    }

    $username = mysql_result($result,0,'usrname');
    $passwd = mysql_result($result,0,'passwd');
    return array($username, $passwd, $num);
}
您的函数返回一个字符串或数组。顺便说一句,如果您不检查返回类型并假定它是数组,您将触发子字符串访问(请参见):


通常最好让函数返回一种类型,而不是多个类型。但是,这取决于您的设计和编码风格,因此我只能提出建议,例如返回包含状态消息的对象、状态代码(成功/失败)以及(如果可用)要返回的数据数组。然而,这取决于你想要/需要什么。您也可以使用检查返回类型。

有关代码的一些注释:

  • 您不需要在
    返回后
    中断
  • break
    在PHP中不适用于
    if
  • 如果已经在使用
    return
    ,则不需要执行
    else
我对您的代码做了一些更改,以使其更加可见,并降低了圈复杂度。这可能有助于您更容易发现错误:

function unnamed(/* ... unknown parameters ... */)
{
    /* ... some code ... */
    if ($num==0)
    {
        return "Do not appear to be registered. Please check your email input again.";
    }

    // there is an entry. check for consistency
    $procrastinateDB = mysql_result($result,0,'procrastinate');
    if ($procrastinate != $procrastinateDB)
    {
        return "Answer to your procrastination question is incorrect. Please try again!";
    }

    $username = mysql_result($result,0,'usrname');
    $passwd = mysql_result($result,0,'passwd');
    return array($username, $passwd, $num);
}
您的函数返回一个字符串或数组。顺便说一句,如果您不检查返回类型并假定它是数组,您将触发子字符串访问(请参见):

通常最好让函数返回一种类型,而不是多个类型。但是,这取决于您的设计和编码风格,因此我只能提出建议,例如返回包含状态消息的对象、状态代码(成功/失败)以及(如果可用)要返回的数据数组。然而,这取决于你想要/需要什么。您还可以使用检查返回类型

返回的数组仍然包含$usersname='D'、$passwd='o'和$num=''

$num
为0时,返回字符串:

似乎没有注册。请再次检查您的电子邮件输入

在PHP中,可以访问数组之类的字符串。所以,我猜您没有检查是否返回了字符串或数组,而是执行了如下操作:

list($username, $passwd, $num) = yourFunction();
由于可以像数组一样访问字符串,
$username
将是
D
$password
将是
o
$num
将是一个空格,因为它们是前三个字符

我建议在访问该值之前使用
is\u array
,以确保您知道得到的是什么

$ret = yourFunction();
if(is_array($ret)){
   list($username, $passwd, $num) = $ret;
}
else{
   // Something else
}
返回的数组仍然包含$usersname='D'、$passwd='o'和$num=''

$num
为0时,返回字符串:

似乎没有注册。请再次检查您的电子邮件输入

在PHP中,可以访问数组之类的字符串。所以,我猜您没有检查是否返回了字符串或数组,而是执行了如下操作:

list($username, $passwd, $num) = yourFunction();
由于可以像数组一样访问字符串,
$username
将是
D
$password
将是
o
$num
将是一个空格,因为它们是前三个字符

我建议在访问该值之前使用
is\u array
,以确保您知道得到的是什么

$ret = yourFunction();
if(is_array($ret)){
   list($username, $passwd, $num) = $ret;
}
else{
   // Something else
}

请注意:
break
语句在这里是无用的
return
已退出该函数,因此不需要使用
break
。@hakre:你在说什么?@Rocket:我在开玩笑;)@哈克雷:啊,我想我错过了,对不起。我的大脑今天有点混乱,有很多工作要做。只需注意:
break
语句在这里是无用的
return
已退出该函数,因此不需要使用
break
。@hakre:你在说什么?@Rocket:我在开玩笑;)@哈克雷:啊,我想我错过了,对不起。今天我的大脑有点混乱,有很多工作要做。谢谢你给我提供了使用is_数组检查的提示。现在它工作得很好。@shenge86:没问题。使用PHP时一定要小心,变量可以是任何类型的,因此您需要确保知道每个变量是什么。感谢您提供有关使用is_数组进行检查的提示。现在它工作得很好。@shenge86:没问题。要小心使用PHP,变量可以是任何类型的,所以你需要确保你知道每个变量是什么。谢谢!拥有干净的代码是好的。您有什么建议可以替代不同类型的退货?谢谢!拥有干净的代码是好的。除了返回不同的类型,您有什么建议?