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,.....); } }
class 汽车 { public run() { echo "汽车跑起来了."; } } class 人 { //人要开车,车不会自已发动... }
以上程序如何做?
class 人 { private 汽车; public function __construct($汽车) { $this->汽车 = $汽车; } public function 我开车了() { $this->汽车->run(); } } class 人 extends 汽车 {}//这就太不好了