简单的PHP函数布尔问题

时间:2011-04-16 13:35:54

标签: php function boolean

有人请向我解释为什么这不起作用,以及我做错了什么。出于某种原因,当我运行函数validateUsername时,$error变量保持完全不变,而不是评估为true。这怎么可能?

然而,如果我删除函数中的代码并在没有函数调用的情况下直接运行它,它就可以工作。下面的例子非常简单,实际上是伪代码,但它不起作用。这种行为对PHP来说是独特的吗?我不想再用其他语言再碰到这个。

<?php

$username = 'danielcarvalho';
$error = false;

function validateUsername()
{
    if (strlen($username) > 10)
    {
        $error = true;
    }
}

validateUsername();

if ($error == false)
{
    echo 'Success.';
}
else
{
    echo 'Failure.';
}

?>

2 个答案:

答案 0 :(得分:7)

这不起作用,因为$username功能范围内的validateUsername不可用。 (也不是$error变量。)有关详细信息,请参阅PHP手册的variable scope部分。

你可以通过在你的函数中添加global $username, $error;来解决这个问题,虽然这不是一个特别优雅的方法,因为全局变量因为太详细的原因而被避开。因此,最好接受$username作为函数的参数,如下所示:

<?php
    function validateUsername($username) {
        if (strlen($username) > 10) {
            return false;
        }

        return true;
    }

    if (validateUsername('danielcarvalho')) {
        echo 'Success.';
    }
    else {
        echo 'Failure.';
    } 
?>

答案 1 :(得分:1)

$ error在函数validateUsername中具有局部作用域。要访问全局变量,请使用global keyword。

了解范围here。将您的功能更改为:

function validateUsername($username)
{
    global $error;
    if (strlen($username) > 10)
    {
        $error = true;
    }
}

validateUsername($用户名);

使用函数参数更好地实现:

function validateUsername($username, &$error)
{
    if (strlen($username) > 10)
    {
        $error = true;
    }
}
validateUsername($username, $error);

另一种实施方式:

function validateUsername($username)
{
    if (strlen($username) > 10)
    {
        return true;
    }
    return false;
}
$error = validateUsername($username);