我在向 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 代码的一些澄清。
这是验证来自请求提交的表单数据的单个函数的示例。已设置 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 代码的一些澄清。