AddRecipients использует push_array, но он не работает. Что я здесь делаю неправильно?
В class.emailer.php
class Emailer { public $sender; public $recipients; public $subject; public $body; function __construct($sender) { $this->sender = $sender; $this->recipients = array(); } public function addRecipients($recipient) { array_push($this->recipients, $recipient); } public function setSubject($subject) { $this->subject = $subject; } public function setBody($body) { $this->body = $body; } public function sendEmail() { echo "From sendEmail, send email initiated<br />"; echo "Body: ".$this->body."<br />"; echo "Subject: ".$this->subject."<br />"; print_r ($this->sender); print_r ($this->recipients); echo "<br />"; foreach ($this->recipients as $recipient) { echo "6<br />"; //$result = mail($recipient, $this->subject, $this->body,"From: {$this->sender}\r\n"); echo "7<br />"; if ($result) echo "Mail successfully sent to {$recipient}<br/>"; } }
}
И в class.extendedemailer.php
include_once("class.emailer.php"); class ExtendedEmailer extends emailer { function __construct(){ //overwriting __contruct here } public function setSender($sender) { $this->sender = $sender; } }
И в sendemail.php
include_once("class.extendedemailer.php"); echo "start 1<br />"; $xemailer = new ExtendedEmailer(); echo "1. adding sender: <br />"; $xemailer->setSender("sender@mywebsite.com"); print_r ($xemailer->sender); echo "<br />2. adding recipients: <br />"; $xemailer->addRecipients("recipientemail@gmail.com"); var_dump ($xemailer->recipients); echo "<br />3. adding subject: <br />"; $xemailer->setSubject("Just a Test<br />"); print_r ($xemailer->subject); echo "4. adding body<br />"; $xemailer->setBody("Hi, How are you?<br />"); print_r ($xemailer->body); echo "5. sending email<br />"; $xemailer->sendEmail();
Выход получателей равен NULL.
start 1 1. adding sender: sender@mywebsite.com 2. adding recipients: NULL 3. adding subject: Just a Test 4. adding body Hi, How are you? 5. sending email From sendEmail, send email initiated Body: Hi, How are you? Subject: Just a Test
Вероятно, вы не инициируете $recipients
при перезаписи конструктора.
class Emailer { public $recipients = array(); function __construct($sender) { $this->sender = $sender; }
Должен это делать. Проверьте свои предупреждения для
Предупреждение: array_push () ожидает, что параметр 1 будет массивом, null указывается в …
Вам нужно вызвать конструктор родителя из конструктора ExtendedEmailer.
class ExtendedEmailer extends emailer { function __construct(){ parent::__construct(null); } // ... }
иначе $recipients
никогда не инициализируются как массив.
Проблема в том, что вы переопределяете конструктор класса Email
и никогда не вызываете его ( parent::__construct()
). Либо вызовите родительский конструктор в конструкторе класса ExtendedEmailer
, либо полностью удалите конструктор из ExtendedEmailer
если вы его фактически не используете (что в вашем примере кода, вы не знаете).
Вы пропустили вызов родительского конструктора в конструкторе дочернего элемента
class ExtendedEmailer extends emailer { function __construct(){ //overwriting __contruct here parent::__construct('dummy_sender@sender.com'); } }
должен исправить эту проблему.
в файле «class.emailer.php» просто сделайте
public $recipients = array();
вместо простого голого
public $recipients;
Вот и все, и, как сюрприз, вы можете пополнить свои конструкторы по своему усмотрению. – Что ты об этом думаешь?
С уважением, М.