我在向 PHP 中的函数返回错误值时遇到问题

I'm having issues with returning false values to functions in PHP

这是验证来自请求提交的表单数据的单个函数的示例。已设置 true 变量,每个函数检查验证要求,然后继续而不返回任何内容或 returns false 并更改 $check 值。底部的函数然后检查 $check 值是否已更改为 false,如果它具有 SQL 语句,则不会是 运行.

$check = true;

function productNameValidation(){

    if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){

        //then $valid['ID'] = "string: " . $_REQUEST['ID']
        $valid['product_name'] = $_REQUEST['product_name'];
        $err['product_name'] = "No errors";
        //if not    
    } else {
        if(empty($_REQUEST['product_name'])){
            $valid['product_name'] = "No data entered!";
        } else {    
            $valid['product_name'] = $_REQUEST['product_name'];
        } //$err['ID'] = "error message"

        $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
        $check = false; 
    }
}

function checkProduct()
{
    productNameValidation();
    productGenreValidation();
    productPriceValidation();
    productEsrbValidation();
    productThumbnailValidation();
    releaseDateValidation();

    return $check;
}
if($check == true)
{
   //Insert into database
}

您可以像使用局部变量而不是全局变量一样使用检查,所以在函数中。 相反,如果你想把它作为一个全局的,在函数的开头,你必须指定你指的是

global $check;

你可以这样做:

function productNameValidation(){
    $check = true;
    if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){

        //then $valid['ID'] = "string: " . $_REQUEST['ID']
        $valid['product_name'] = $_REQUEST['product_name'];
        $err['product_name'] = "No errors";
        //if not    
    } else {
        if(empty($_REQUEST['product_name'])){
            $valid['product_name'] = "No data entered!";
        } else {    
            $valid['product_name'] = $_REQUEST['product_name'];
        } //$err['ID'] = "error message"

        $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
        $check = false; 
    }
    return $check;
}

if(productNameValidation()) {
....
}

您可以在您的验证函数中 return $check,这将允许您在函数范围之外使用 $check 的值,如下所示:$check = productNameValidation()。我在上面看到的另一个重要注意事项:您应该尽量避免使用全局范围。

你需要做的是在不同的函数上添加不同的变量。如果您将此代码用于以 true 开头并需要检查的方法,如果检查失败则变为 false,请尝试此方法:

   // $check = true;

    function productNameValidation(){
        $nameValidation = TRUE;
        if(isset($_REQUEST['product_name']) && !empty($_REQUEST['product_name']) && preg_match("/^[A-Za-z0-9 :]*[A-Za-z0-9][A-Za-z0-9 :]{0,50}$/",($_REQUEST['product_name']))){

            //then $valid['ID'] = "string: " . $_REQUEST['ID']
            $valid['product_name'] = $_REQUEST['product_name'];
            $err['product_name'] = "No errors";
            //if not    
        } else {
            if(empty($_REQUEST['product_name'])){
                $valid['product_name'] = "No data entered!";
            } else {    
                $valid['product_name'] = $_REQUEST['product_name'];
            } //$err['ID'] = "error message"

            $err['product_name'] = "Product Name must only contain letters, numbers and ':'!";
            $nameValidation = false; 
        }
    return $nameValidation;
    }

    function checkProduct()
    {
    $checkProduct = true; ///true until proven false.

        $checkProduct = productNameValidation();
        //This code gives $checkProduct the boolean value returned 
    //from the function

       $checkProduct = productGenreValidation();
        $checkProduct = productPriceValidation();
        $checkProduct = productEsrbValidation();
        $checkProduct = productThumbnailValidation();
        $checkProduct = releaseDateValidation();

        return $checkProduct;
    }
    if($checkProduct  == true)
    {
       //Insert into database
    } 

我在这里所做的是每个函数 returns 一个 TRue/False 标志布尔变量,可以用 if(){ 语句检查,你可以 运行 以这种方式通过众多功能检查您需要的每个方面。重要的一点是您需要 return 每个函数的值,您可以使用初始设置手动设置布尔值,然后根据条件更新 - 例如设置 $checkProduct = TRUE 直到它从任何子程序中变为 FALSE函数。

在这种情况下,全局变量确实不是一个好主意。

编辑:感谢@Edward 对布尔 return 代码的一些澄清。