注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

PHP学习笔记 - PHP面向对象之继承(构造方法篇)| PHP's object-oriented inheritance (constructor)  

2011-07-23 20:52:32|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
前一篇文章讲了构造方法定义时有趣的问题,这篇文章还是继续讲构造方法,但讲的是它的继承问题。PHP5的类的实例初始化与JAVA存在不同,差异在哪里,通过一个测试来说明:

一、父类源代码 | Parent class source

父类源代码:
<?php
class People {
   
    private $name;
   
    private $age;
   
    function __construct() {
        echo "call construct method '__construct'";
        $this->age=20;
    }

    public function setName($name) {
        $this->name = $name;
    }
   
    public function getName() {
        return $this->name;
    }
   
    public function setAge($age) {
        $this->age = $age;
    }
   
    public function getAge() {
        return $this->age;
    }
}
?>


二、无自定义构造方法的子类 | Subclass has no custom constructor

1、无自定义构造方法的子类源代码:
<?php
require "/home/nieyong/local/nginx-0.7.68/html/object/Pepole.php";

class Man extends People {
   
    private $sex;
   
    public function getSex() {
        return $this->sex;
    }
}
?>

2、执行:
<?php
require '/home/aofeng/local/nginx-0.7.68/html/object/Man.php';

$man = new Man();
?>
<br/>
People Information:<br/>
name:<?php echo $man->getName();?><br/>
age:<?php echo $man->getAge();?><br/>
sex:<?php echo $man->getSex();?><br/>
输出:
call construct method '__construct'
People Information:
name:
age:20
sex:


三、有自定义构造方法的子类 | Subclass has custom constructor

1、有自定义构造方法的子类源代码:
<?php
require "/home/nieyong/local/nginx-0.7.68/html/object/Pepole.php";

class Man extends People {
   
    private $sex;

    function __construct() {
        $this->sex = "M";
    }
   
    public function getSex() {
        return $this->sex;
    }
}
?>
说明:
多了一个自定义的构造方法。

2、执行:
<?php
require '/home/aofeng/local/nginx-0.7.68/html/object/Man.php';

$man = new Man();
?>
<br/>
People Information:<br/>
name:<?php echo $man->getName();?><br/>
age:<?php echo $man->getAge();?><br/>
sex:<?php echo $man->getSex();?><br/>
输出:
People Information:
name:
age:
sex:M

3、修正Man的代码,新的源代码如下:
<?php
require "/home/nieyong/local/nginx-0.7.68/html/object/Pepole.php";

class Man extends People {
   
    private $sex;

    function __construct() {
        parent::__construct();
        $this->sex = "M";
    }
   
    public function getSex() {
        return $this->sex;
    }
}
?>
说明:
在Man的构造方法中调用父类的构造方法,增加的代码是:parent::__construct();


三、总结 | Summary

当子类有自定义的构造方法时,应在子类的自定义构造方法中调用父类的构造方法。如果在父类的构造方法中有初始化一些成员的数据,不调用父类的构造方法会导致子类对象的数据不完整。
这一点熟悉Java的童鞋们可能会觉得有点郁闷:PHP为什么不会自动调用父类的默认构造方法来初始化父类实例呢?


<正文结束>

文章声明


作者:傲风(aofengblog@163.com)       编写时间:2011年07月23日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容!

  评论这张
 
阅读(1768)| 评论(4)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017