购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.6 实例与多态

实例和多态这两个词汇是面向对象开发的重点,开发者定义类结构,并从中进行数据抽象,最重要的要点是面向对象中的多态概念。

多态表示在一个对象中,它与另一个对象使用的类型相同,如果B类是A类的后代,A类的一个方法除了可接收自已实例的参数外,还可以接受子类B传递的参数。

1.public

public修饰的属性或方法可以被其他类在外部访问。

2.protected

protected修饰的成员变量或方法表示允许对象内部和子类的对象访问。被限定为protected的成员变量,只能通过父类本身或子类进行访问或修改。上面的代码就是子类通过继承,可以共享和访问父类中的成员变量以及父类的方法。

现在我们创建另一个文件名class.extendedemailer.php,使用如代码清单2-6所示的代码:

代码清单2-6 创建一个emailer的子类extendedEmailer


<php
class extendedEmailer extends emailer{
      function __construct(){}
      public function setSender$sender{
            $this->sender = $sender
      }
}>

下面我们使用该类,即声明该类的对象应用,如代码清单2-7所示:

代码清单2-7 使用extendedEmailer扩展类


<php
      include_once"class.emailer.php");
      include_once"class.extendedemailer.php");
      $xemailer = new ExtendedEmailer();
      var_dump$xemailer);
      $xemailer->setSender"webmaster@21cto.com");
      $xemailer->addRecipients"jiang.du@qq.com"); //访问方法 
      //给一些方法发送参数
      $xemailer->setSubject"我要找工作");
      $xemailer->setBody"你好,你好?");
      $xemailer->sendEmail();
   >

你会发现,我们访问了extendsendEmail对象,这实际上继承的是Emailer父类的方法。当声明为protected的方法时,这意味着非继承方式不能调用。如果我们执行下面的代码,它会产生一个PHP致命错误,如代码清单2-8所示:

代码清单2-8 非继承的方法访问protected方法


<php
include_once"class.emailer.php");
include_once"class.extendedemailer.php");
$xemailer = new ExtendedEmailer();
$xemailer->sender = "hasin@21cto.com"
   >

我们会得到类似如下的错误信息:


<b>Fatal error</b> Cannot access protected property extendedEmailer::$sender in <b>C\OOP with PHP5\Codes\ch1\test.php</b> on line <b>5</b><br />

3.private

private表示属性或方法被声明为私有,只能由类本身的方法访问,继承该类的子类也是不能访问的。在旧的PHP版本的面向对象模式里,类的属于都使用var关键字来定义,对于方法,这相当于使用了public关键字。

除了以上3个关键字,对于成员方法,还有以下3个关键字描述,分别为静态(static)、抽象(abstract)和最终(final)方法。

·static静态方法虽然隶属于某个类,但它不受该类的束缚,不需要声明对象实例就可以直接被外部访问和存取。

·abstract抽象方法不能直接使用,必须经过实现(使用implement关键字)才可以使用。

·final方法,表示该方法是最终的版本,不能再重新声明,也不能被重写。

在类中也可以使用常量,常量的值是在运行时不能被改变,与变量的区别是,它们以大写字符表示,并且不能使用$美元符。 Cf7hGfoi30OJhebahDUWwOTphiDsJUIF6Z3J4NjwRXrSdcR4HRKus+Ke1YCt2Qts

点击中间区域
呼出菜单
上一章
目录
下一章
×