2013-05-01 103 views
2

addRecipients使用push_array,但它不起作用。我在这里做错了什么?在php的方法中使用array_push

在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("[email protected]"); 
print_r ($xemailer->sender); 
echo "<br />2. adding recipients: <br />"; 
$xemailer->addRecipients("[email protected]"); 
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(); 

输出的收件人是NUL L.

start 1 
1. adding sender: 
[email protected] 
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 
+0

public $ recipients = array(); – skrilled 2013-05-01 23:08:50

回答

4

你可能不启动$recipients当你重写了构造函数。

class Emailer { 
    public $recipients = array(); 

    function __construct($sender) 
    { 
     $this->sender = $sender; 
    } 

应该这样做。检查你的警告,

警告:array_push()预计参数1是阵列,在...

2

空给你需要调用从ExtendedEmailer的构造父类的构造函数。

class ExtendedEmailer extends emailer 
{ 
    function __construct(){ 
    parent::__construct(null); 
    } 

    // ... 
} 

否则$recipients从不初始化为数组。

2

问题是你重写了Email类的构造函数,并且从来没有调用它(parent::__construct())。要么调用ExtendedEmailer类构造函数中的父构造函数,要么从ExtendedEmailer中完全删除构造函数,如果你没有真正使用它(在你的示例代码中,你不是)。

1

你已经错过了该呼叫并在孩子的构造

class ExtendedEmailer extends emailer 
{ 
    function __construct(){ 
     //overwriting __contruct here 
     parent::__construct('[email protected]'); 
    } 
} 

应该可以解决这个问题的父类的构造。

0

文件“class.emailer.php”只是做

public $recipients = array(); 

而不只是有点赤裸裸

public $recipients; 

这一切,并作为河畔加,你可以自由地根据需要填写您的构造函数。 - 你对此有何看法?

Regards,M.