用简单的例子学面向对象(高手勿进)
时间:2009-10-14
来源:互联网
利用“人写日记”来描述面向对象。
首先我们来了解一下“人是怎样写日记的?”:
1. 要一本日记本
2. 要一支笔
3. 人写日记
这就是我们一般写日记的必要条件。另外我们要分清楚是人写日记还是笔写日记。我觉得是笔写日记,因为直接与笔记本接触的是笔而不是人。不过笔也是要有人使用才行的。所以我们可以画下一下的图:
首先我们要知道人是一个抽象的代名词,所以我们可以创建以下的抽象类,他有命名和写日记的方法。
abstract class Human {
protected $name;
abstract public function setName($name);
abstract public function write(NoteBook $note, Pen $pen, $text);
}
然后我们可以创建编写一个类来继承他,我们叫他Jack:
class Jack extends Human {
public function setName($name) {
$this->name = $name;
}
public function write(NoteBook $note, Pen $pen, $text) {
if (!$note->open()) {
return false;
}
$ok = $pen->write($note, $text);
$note->close();
if ($ok) return true;
else return false;
}
}
我们实现了Human中的两个抽象方法。第一个是命名的方法,第二个是写日记的方法。在写日记的方法中用到了笔记本,笔和要写入的内容。因为内容是人想好的,所以要在Human中提供。
然后我们再写NoteBook类:
class NoteBook {
private $noteBookPath;
private $fp;
public function setBook($path) {
if (file_exists($path)) {
$this->noteBookPath = $path;
return true;
}
return false;
}
public function open() {
if (isset($this->noteBookPath)) {
$this->fp = fopen($this->noteBookPath, 'w');
if ($this->fp) return true;
}
return false;
}
public function getNoteBook() {
if (is_resource($this->fp)) {
return $this->fp;
}
return NULL;
}
public function close() {
if (is_resource($this->fp)) {
fclose($this->fp);
return true;
}
return false;
}
}
NoteBook类有以下的方法:
1. setBook:用于设置一个日记,我们是用一个文件来保存的(也可以使用数据库)。
2. open:用于打开笔记本。
3. getNoteBook:用于获得笔记本。
4. close:用于关闭笔记本。
再来就是Pen类:
class Pen {
public function write(NoteBook $note, $text) {
$book = $note->getNoteBook();
if (!$book) {
return false;
}
if (fwrite($book, $text)) return true;
return false;
}
}
Pen类比较简单,只有写的方法,而这个方法首先获得笔记本,然后就是写入内容到笔记本。
再回来看看Human的write方法:
public function write(NoteBook $note, Pen $pen, $text) {
if (!$note->open()) {
return false;
}
$ok = $pen->write($note, $text);
$note->close();
if ($ok) return true;
else return false;
}
他是首先打开笔记本,然后使用笔来写入内容,写完之后就是关闭笔记本。
到此我们就通过一个简单的例子来了解到面向对象了。
使用:
<?php
$jack = new Jack();//创建一个Jack对象
$book = new NoteBook();//创建一个笔记本
$pen = new Pen();//创建一支笔
$book->setBook('book.txt');//设置笔记本
//写日记
if ($jack->write($book, $pen, 'This is content.')) {
echo 'Write ok';
} else {
echo 'Write no';
}
?>
作者: liexusong 发布时间: 2009-10-14
作者: weatheryyj 发布时间: 2009-10-14
作者: 阿辛 发布时间: 2009-10-15
作者: TankMe 发布时间: 2009-10-15
作者: wxllyf 发布时间: 2009-10-15
其余的像模型
作者: wxllyf 发布时间: 2009-10-15
作者: siyuantlw 发布时间: 2009-10-15
阿辛 发表于 2009-10-15 08:36
:lol:
作者: sunnynet 发布时间: 2009-10-15
发来看看呗
作者: dontlie 发布时间: 2009-10-15
作者: langcier 发布时间: 2009-10-22
作者: 云端o枫o0 发布时间: 2009-10-22

作者: LeeBin 发布时间: 2010-08-05
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28