PHP函数没有';不返回null,但不返回';我也不会归还任何东西

PHP函数没有';不返回null,但不返回';我也不会归还任何东西,php,Php,这是我的代码,它使用扩展的phpMailer。如果我检查firstResult和lastResult,则此选项有效,但如果我检查emailResult,则此选项无效: $validator = new FormValidator(); $firstResult = $validator->checkFirst($_POST['firstname']); $lastResult = $validator->checkLast($_POST

这是我的代码,它使用扩展的phpMailer。如果我检查firstResult和lastResult,则此选项有效,但如果我检查emailResult,则此选项无效:

$validator = new FormValidator();
            $firstResult = $validator->checkFirst($_POST['firstname']);
            $lastResult = $validator->checkLast($_POST['lastname']);
            $emailResult = $validator->checkEmail($_POST['emailaddress1']);
            var_dump($emailResult);
            if (is_null($firstResult) && is_null($lastResult) && is_null($emailResult)) {

                $mail = new ULSMail();

                $mail->IsSMTP();  // telling the class to use SMTP
                $mail->AddAddress("shummel@ulsinc.com");

                $mail->Subject  = "test";
                $mail->MsgHTML($messageHTML);

                redirectULS('english/forms/thankyou.php');

                if(!$mail->Send()) {
                    echo 'Message was not sent.';
                    echo 'Mailer error: ' . $mail->ErrorInfo;
                } else {

                    //$bridge->pushLead($lead);
                }
            } else {
                //...
            }
在我的FormValidator类中:

function checkEmail($email){

        if(strlen(trim($email)) < 8){
        return 'Please enter a valid email address of more than 8 characters</span>';
    } else {
        return NULL;
    }

}
功能检查电子邮件($email){
如果(strlen(trim($email))<8){
return“请输入超过8个字符的有效电子邮件地址”;
}否则{
返回NULL;
}
}
redirectULS是一个简单的重定向功能,用于在我的站点上进行内部重定向。只要我不检查$emailResult,它就可以工作。

您要做的是直接打印结果,这将把
NULL
转换为空字符串。因此,它似乎什么也不返回

注意,我使用了,它测试值和类型是否相等。正如@Tomcat所建议的,您也可以使用

您要做的是直接打印结果,这将把
NULL
转换为空字符串。因此,它似乎什么也不返回


注意,我使用了,它测试值和类型是否相等。正如@Tomcat所建议的,您也可以使用

实际上,当字符串小于8时,它返回
NULL

尝试
var\u dump
而不是
echo
/
print
,它应该显示字符串的“真实”值(
NULL
)。

实际上,当字符串小于8时,它返回
NULL

尝试
var\u dump
而不是
echo
/
print
,它应该显示字符串的“真实”值(
NULL
)。

您是如何测试返回的

echo is_null(checkEmail('foo@bar.com')) ? 'Pass' : 'Fail';
也只是一张纸条;您的8个字符的验证参数将在电子邮件(如
j@cc.tv
。虽然肯定很少,但建议您使用正则表达式基于表单进行验证。网络上有大量的信息



你是如何测试报税表的

echo is_null(checkEmail('foo@bar.com')) ? 'Pass' : 'Fail';
也只是一张纸条;您的8个字符的验证参数将在电子邮件(如
j@cc.tv
。虽然肯定很少,但建议您使用正则表达式基于表单进行验证。网络上有大量的信息




你怎么知道它不返回NULL?我在别处测试它,测试返回某种类型的值,但不是我可以输出的值。如果使用PHP 5.2或更高版本,它现在内置了电子邮件检查-一些小建议..让函数返回true或false。这将使它更加可重用。让调用函数的脚本确定是显示errortext还是执行其他操作。您如何知道它不返回NULL?我在其他地方对它进行测试,测试返回某种值,但似乎无法输出。如果使用PHP 5.2或更高版本,它现在已经内置了电子邮件检查-一些小建议..让函数返回true或false。这将使它更加可重用。让调用函数的脚本确定是显示errortext还是执行其他操作。但是如果我测试它是否为null,则如果$email为8个字符或更长,它将测试为非null。@shummel如何测试
null
?上面的代码与您不一致。@shummel7845这意味着您对null的测试是错误的。试试marcog的示例代码。@marcog就在我正要编辑它的时候。。。一定要使用==,而不是==,来检查NULL。@phihag是的,我刚刚意识到PHP有
==
操作符。我的PHP有点生疏。但如果我测试它是否为空,如果$email为8个字符或更长,它将测试为非空。@shummel您如何测试
null
?上面的代码与您不一致。@shummel7845这意味着您对null的测试是错误的。试试marcog的示例代码。@marcog就在我正要编辑它的时候。。。一定要使用==,而不是==,来检查NULL。@phihag是的,我刚刚意识到PHP有
==
操作符。我的PHP有点生疏。它在
123456789
上也会失败,正如我的答案所示,但实际上并没有指出它。:)Tomcat——我愿意使用上面的函数,但它会返回什么呢?匹配的是真的,不匹配的是假吗?@shummel7845;没错。使if(validateEmail($user_email)){…}易于使用
,尽管您可能希望探索其他正则表达式模式。我只是从PHP文档注释中提取了这个。有严格得多的,也有宽松得多的,你肯定能够找到或创建一个适合你需要的;如果(is_null($firstResult)&&is_null($lastResult)&&$emailResult!=FALSE){…}大括号中的代码永远不会执行,除非我删除电子邮件部分。思想?我还尝试了$emailResult=TRUE和$emailResult。我不确定如何确定
$firstResult
;我猜您使用的功能与以前的电子邮件验证类似。我的建议是修改您的其他验证函数以返回布尔值,因此允许您的条件为
if($validator->checkFirst($first)&&&&$validator->checkLast($last)&&&&$validator->checkEmail($email)){stuff_is_valid();}
。注意,为了保持一致性,我已经修改了命名约定,我强烈建议您也这样做:)在
123456789
上也会失败,正如我的回答所显示的那样,我没有实际指出它。:)Tomcat——我愿意使用上面的函数,但它会返回什么呢?匹配的是真的,不匹配的是假吗?@shummel7845;没错。使if(validateEmail($user_email)){…}
易于使用
,尽管您可能希望探索其他正则表达式模式。我只是从PHP文档注释中提取了这个。有严格得多的,也有宽松得多的,你肯定能够找到或创建一个适合你需要的;如果(is_null($firstResult)&&is_null($lastResult)&&$emailResult!=FALSE){…}大括号中的代码永远不会得到exe
class Validator{

    public function checkEmail($email){
        return preg_match('/^[^@]+@[a-zA-Z0-9._-]+\.[a-zA-Z]+$/', $email);
    }

    public function checkName($name){
        return preg_match('/[a-z]{2,}/i', $name); //valid if $name is 2+ A-Z characters
    }

}

$v = new Validator;
if($v->checkEmail($_POST['email'])
&& $v->checkName($_POST['fname'])
&& $v->checkName($_POST['lname'])){
    //the info is valid
}else{
    //the info is not valid
}