2012-03-15 81 views
0

我想验证我的类中的方法是否返回一个真正的值。请在课堂下面看看我的对象,并告诉我这是否是一个有效的陈述。我正在使用它来验证电子邮件地址是否已经存在于数据库中。验证方法返回true

我的类,它的构造

class CheckEmail { 

public function __construct($email) { 

$db = Database::GetHandler(); 

    $sql = "SELECT email from users WHERE email='$email'"; 
    $stmt = $db->prepare($sql); 
    $stmt->execute(); 
    $rows = $stmt->rowCount(); 

    if($rows > 0) { 

     return true; 

    } else { 

     return false; 
    } 
} 

} 

我从这个类对象:

if($checkEmail = new CheckEmail($_POST[email])==true) {... 
+2

这OOP是如何工作的不是。如果你想要一个返回'true'或'false'的函数,然后创建一个函数。当你不从构造函数返回一个对象时,我不知道PHP在做什么,但即使它返回了布尔值,这也是一个糟糕的设计。 – 2012-03-15 18:43:45

+2

你是**开放**到SQL注入。学习如何使用PDO做适当的准备查询,或者**如果您还没有成功,您将被黑客入侵。 – Brad 2012-03-15 18:44:04

+2

[Echo Return构造方法;](http://stackoverflow.com/questions/3254279/echo-r​​eturn-construct-method),[构造函数返回什么可以吗?](http:// stackoverflow.com/questions/6821288/is-it-ok-for-a-construct-to-return-something) – jprofitt 2012-03-15 18:44:27

回答

4

构造函数不能返回一个值,这没有任何意义。构造函数在那里创建(并返回)它的类的一个对象。

你应该做另一个功能来做这个检查,然后调用它。

class CheckEmail { 

    public function check($email) { 
     $db = Database::GetHandler(); 

     $sql = "SELECT email from users WHERE email='$email'"; 
     $stmt = $db->prepare($sql); 
     $stmt->execute(); 
     $rows = $stmt->rowCount(); 

     if($rows > 0) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
} 

(附注:你可以做return $rows > 0;

然后你就可以这样调用:

var $email = new CheckEmail; 
if($email->check($_POST[email]) === TRUE){ 
// or just if($email->check($_POST[email])){ 

事情是,你真的需要在这里一类?你可以正常地声明CheckEmail函数,而不是在它自己的类中。

+0

谢谢Rocket。这工作正常。不,这个班是矫枉过正的。我用这个作为如何从类方法返回值的例子。 – stevenpepe 2012-03-15 18:56:58

+0

@stevenpepe:啊,好的。很高兴我可以帮助:-) – 2012-03-15 19:01:23

-3

尝试把

$checkEmail = new CheckEmail($_POST[email]); 

if语句之前,然后

If($checkEmail) {... 
+1

'$ checkEmail'将是一个对象而不是一个布尔值,因为构造函数除了创建的对象之外不会返回任何东西。 – 2012-03-15 18:55:27

+0

您不能从构造函数返回值。另外'if($ var = function())'是有效的; '='运算符将返回刚刚设置的值。 – 2012-03-15 18:55:36