在面向对象开发中,它最大的特点之一就是可以扩展一个类,创建一个新的子类。新的子类可以保留所有的父类方法或重写的方法。我们来扩展emailer类,重写sendEmail方法,以便它可以发送HTML邮件,如代码清单2-9所示:
代码清单2-9 扩展emailer的HtmlEmailer类
<?php class HtmlEmailer extends emailer{ public function sendHTMLEmail(){ foreach ($this->recipients as $recipient){ $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' ."\r \n"; $headers .= 'From: {$this->sender}' . "\r\n"; $result = mail($recipient, $this->subject, $this->body, $headers); if ($result) echo "HTML Mail successfully sent to{$recipient} <br/>"; } } }?>
由于这个类扩展了emailer类,并引入了新的方法:sendHTMLEmail(),我们仍然可以从其父类的方法调用,如代码清单2-10所示:
代码清单2-10 使用发送邮件类
<?php include("class.htmlemailer.php"); $hm = new HtmlEmailer(); //etc.... $hm->sendEmail(); $hm->sendHTMLEmail(); ?>
如果想访问父类中的方法,我们可以使用parent关键字。例如,如果要访问父类中名叫sayHello()的方法,可以写成parent::sayHello()。
上面的代码清单中,没有写任何关键字调用sendEmai,这表示该方法是从父类emailer类的继承。
另外,如果子类中没有重写构造方法,执行时父类的构造方法同样会被调用。