2013-09-19 6 views
0

Я создал класс E-mail в PHP, но он всегда возвращает успех, даже когда почтовые данные пустые. Исключения явно не работают, и мне интересно, почему он не отправляет никаких писем. Вот код:PHP исключить новое исключение

<?php 

class Contact 
{ 
    private $toEmail = '[email protected]', $subject = 'Personal Site - Contact'; 
    private $name, $email, $message; 

public function __constructor(array $arr) 
{ 
    if(!empty($arr['name']) && !empty($arr['email']) && !empty($arr['msg'])) 
    { 
     $this->name = $this->ValidateName($arr['name']); 
     $this->email = $this->ValidateEmail($arr['email']); 
     $this->msg = $this->SanitizeMessage($arr['msg']); 

     $this->SendMail($this->name, $this->email, $this->msg); 
    } 
    else 
    { 
     throw new Exception("Please fill all the required fields"); 
    } 
} 

private function ValidateName($name) 
{ 
    if(ctype_alpha($name)) 
    { 
     return $name; 
    } 
    else 
    { 
     return null; 
    } 
} 

private function ValidateEmail($email) 
{ 
    if(filter_var($email, FILTER_VALIDATE_EMAIL)) 
    { 
     return $email; 
    } 
    else 
    { 
     return null; 
    } 
} 

private function SanitizeMessage($msg) 
{ 
    return htmlentities($msg); 
} 

private function SendMail($name, $email, $msg) 
{ 
    $mailHeader = "From: " . $email . "\r\n"; 
    $mailHeader .= "Reply-To: " . $email . "\r\n"; 
    $mailHeader .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

    $messageBody = "Name: " . $name . ""; 
    $messageBody .= "Email: " . $email . ""; 
    $messageBody .= "Comment: " . nl2br($msg) . ""; 

    if(mail($this->toEmail, $this->subject, $messageBody, $mailHeader)) 
    { 
     return true; 
    } 
    else 
    { 
     throw new Exception('Message couldn\'t be sent'); 
    } 
} 
} 

try 
{ 
    $obj = new Contact($_POST); 
} 
catch(Exception $ex) 
{ 
    echo json_encode($ex); 
} 

echo json_encode('Message was sent succesfully'); 

?> 
+2

LOL ... неправильный пост. Сожалею. – Brian

+0

Почему у вас есть метод под названием '__constructor' ?? – PeeHaa

+0

Возможно, вы захотите, чтобы методы 'ValidateX' генерировали исключение и ловили его в' __construct' с помощью try/catch и затем бросали. Таким образом, все недействительные вызовы приводят к catchable exception вместо некоторого возвращающего «null». – Anthony

ответ

4

Конструктор __construct(), не __constructor(). Эта функция никогда не называется.
Кроме того, избегайте делать действия в конструкторах, задавая переменные, это нормально, но на самом деле отправка почты при создании нового объекта является неожиданным для большинства разработчиков.

+0

Я действительно использовал мой автозапуск для этого oO, плохо попробуйте, что thx –

Смежные вопросы