2012-03-15 4 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

Это не так, как ООП должна работать. Если вы хотите функцию, которая возвращает 'true' или' false', тогда создайте функцию. Я не знаю, что делает PHP, когда вы не возвращаете объект из конструктора, но даже если он возвращает логическое значение, это плохой дизайн. –

+2

Вы ** широко открыты ** для SQL-инъекции. Научитесь делать правильный подготовленный запрос с PDO, или ** вы будете взломаны **, если вы еще не были. – Brad

+2

Возможный дубликат [Echo Return construct method;] (http://stackoverflow.com/questions/3254279/echo-return-construct-method), [Можно ли построить конструкцию?] (Http: // stackoverflow.com/questions/6821288/is-it-ok-for-a-construct-to-return-something) – jprofitt

ответ

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; 
     } 
    } 
} 

(P.S. Вы можете просто сделать return $rows > 0;)

И тогда вы можете назвать это так:

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

Дело в том, действительно ли вы нужен класс здесь? Вы можете просто объявить функцию CheckEmail нормально, а не в своем классе.

+0

Спасибо Ракету. Это прекрасно работает. Нет, класс переполнен. Я использую это как пример того, как вернуть значение из метода класса. – stevenpepe

+0

@stevenpepe: А, ок. Рад, что я мог бы помочь :-) –

-3

Попробуйте положить

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

Перед если утверждением, то

If($checkEmail) {... 
+1

'$ checkEmail' будет объектом, а не логическим значением, поскольку конструкторы ничего не возвращают, кроме объекта, который они создали. –

+0

Вы не можете вернуть значение из конструктора. Также 'if ($ var = function())' valid; оператор '=' вернет значение, которое он только что установил. –