Intereting Posts
Неблокирующие функции PHP Laravel 4 Проверка формы, расширение метода __call () Данные JQuery Mobile POST пустые в $ _POST PHP-массив, хранящийся в сеансе, имеет значение null, если мы инициализируем массив с тем же самым ключом, это проблема с кодировкой или проблема с php? Kohana 3: Пример модели с проверкой перенос данных формы php в окно js Как аутентифицировать пользователя в PHP / MySQL? Упрощение форм PHP, которые предварительно заполняются данными dabase и проверкой ошибок, поэтому активно перезаписывать данные $ _POST Установить сеанс var с помощью ajax htaccess css images Проверьте, является ли строка временной отметкой unix конвертировать дату в unixtime php mysql_affected_rows () возвращает 0 для инструкции UPDATE, даже если обновление действительно происходит Предупреждение «Excel нашел нечитаемый контент» при открытии файлов Excel, сделанных с помощью PHPExcel Обнаружение клиентов с помощью прокси-серверов через PHP

Использование метода array_push в методе php

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; 

Вот и все, и, как сюрприз, вы можете пополнить свои конструкторы по своему усмотрению. – Что ты об этом думаешь?

С уважением, М.