文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>不要继承乱用.

不要继承乱用.

时间:2009-04-19  来源:liuxingyuyuni

class DB
{

}

class Student
{
    public function getAllStudent()
    {
        
    }
}

DB 数据库类, Student学生类,因为Student需要从数据库当中读取学生列表,所以这里需要使用到DB类

再写下去有些朋友可能会这样:

class Student extends DB
{
    //我有操作DB库的能力了.
}

在这里 Student 与 DB 基本上没有什么关系,根本谈不上什么is-a的关系,不管这两个家伙谁继承谁都

完全的没有道理,那么在这里只是Student'需要'用到DB库.这里可以应用"聚合/包含"的概念

例如:

class Student {
    private $DB; //Student类中包含了DB.这样做在Student当中也完全拥用了DB的功能,同样实现了代码重用.
    public function __construct($DB)
    {
        $this->DB = $DB;
    }
    /**
     * 也可以这样
    */
    public function __construct()
    {
        require("数据库配置信息.php");
        $this->DB = new DB($host, $user,.....);
    }
}

其实在很多情况下继承都被乱用了,类似这样不合理的代码看到了很多.以前自己也有犯这样的错误.甚用继承.在使用

这种功能的情况下,考虑一下他们之间是不是有IS-A的关系.很简单不是吗?

再来一个小例子.

class 汽车
{
    public run()
    {
        echo "汽车跑起来了.";
    }
}
class 人
{
    //人要开车,车不会自已发动...
}

以上程序如何做?

class 人
{
    private 汽车;
    public function __construct($汽车)
    {
        $this->汽车 = $汽车;
    }
    public function 我开车了()
    {
        $this->汽车->run();
    }
}
class 人 extends 汽车 {} //这就太不好了

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载