PHP函数不返回null但也不返回任何内容

时间:2010-12-27 19:56:40

标签: php

这是我的代码,它使用扩展的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;
    }

}

redirectULS是一个简单的重定向功能,用于我网站上的内部重定向。只要我不检查$ emailResult就行了。

3 个答案:

答案 0 :(得分:3)

Actually, it does!

if (checkEmail("123456789") === NULL)
  print "Actually, it does!\n";

您正在做的是直接打印结果,这会将NULL转换为空字符串。因此它似乎只返回任何东西。

请注意,我使用了triple equals operator,它测试值和类型的相等性。正如@Tomcat建议的那样,您也可以使用is_null()

答案 1 :(得分:1)

实际上,当字符串低于8时,它会返回NULL。 试试var_dump代替echo / print,它应该显示字符串的“真实”值(= NULL)。

答案 2 :(得分:0)

你如何测试回报?

echo is_null(checkEmail('foo@bar.com')) ? 'Pass' : 'Fail';

也只是一张纸条;如j@cc.tv这样的电子邮件,您的8个字符的验证参数将失​​败。虽然很少见,但建议您使用正则表达式根据表单进行验证。网上有很多examples


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
}