基于面向对象实现的PHP留言簿功能示例
本文阐述了基于面向对象实现的PHP的留言簿功能。分享给大家参考,如下:
设计留言簿,一切都会以留言簿为核心,把握什么是什么,按照流程走下去,也就是按照用户填写信息-留言-展示的流程走下去。
现在,我们用面向对象的思维来思考这个问题。在面向对象的世界里,我们会尽最大努力去抽象肉眼看得见、看不见但实际存在的事物或过程。因为它是一个消息簿,所以有一个消息内容实体,并且这个消息实体(域)应该包括消息名称、电子邮件、消息内容和其他元素,如下面的代码所示
//消息实体类消息类{ public $ name//消息制造者的名字是public $ emailmessage maker public $内容的联系信息;//消息内容公共函数_ _ set ($ name,$ value){ $ this-$ name=$ value;} public function __get($name) { if(!isset($ this-$ name)){ $ this-$ name=NULL;}}}上面的类叫做domain,是一个真实的、抽象的实体模型。那么就需要一个留言簿模型,包括留言簿的基本属性和基本操作。代码如下
类gbookModel { private $ bookPath//消息此文件是私有的$ data//消息数据公共函数setbookpath($ book path){ $ this-book path=$ book path;}公共函数getBookPath(){ return $ this-bookPath;} public function open(){ } public function close(){ } public function read(){ return file _ get _ contents($ this-bookPath);}//写入消息公共函数write($ data){ $ this-data=self :3360 safe($ data)-name。''.self :3360 safe($ data)-电子邮件。上面写着:self3360:safe ($ data)返回FILE _ put _ contents($ this-bookPath,$this-data,FILE _ APPEND);}//模拟数据的安全处理,先拆包再打包公共静态函数safe($ data){ $ reflect=new reflection object($ data);$ props=$ reflect-GetProperties();$ message box=new stdClass();foreach($ props as $ props){ $ ivar=$ props-getName();$ messagebox-$ ivar=trim($ props-getValue($ data));}返回$ messagebox} public function delete(){ file _ put _ contents($ this-bookPath,'现在是空的');}}实际的消息离开过程可能比较复杂,还可能包括一系列的准备操作和日志处理,所以要定义一个类来负责数据的逻辑处理,代码如下
class LeveMoDEL { public function write(GBookMoDEL $ GB,$ data){ $ book=$ GB-GetBookPath();$ GB-write($ data);//Log}}最后,一个控制器负责各种操作的封装。该控制器直接面向用户,因此包含查看、删除和留言功能。可以理解,这个控制器是留言簿提供的面向用户的功能,封装了操作细节,只需要调用控制器对应的方法即可。代码如下
class author control { public function message(离开model $ l,gbook model $ g,message $ data){//在留言簿中留下message $l-write($g,$ data);}公共函数视图(gbook model $ g){//检查留言簿的内容返回$ g-read();}公共函数delete(GBookMoDEL $ g){ $ g-delete();echo self : view($ g);}}测试代码如下
$message=新消息;$ message-name=' Chen琼河';$ message-email='[email protected]';$message-content='陈琼河是个实干家';$ GB=new AuthorCONtrol();//创建与消息$pen=new leaveModel()相关的新控制器;//拿出笔$ book=new gbook model();//翻出笔记本$ book-setbookpath(' e : \ \ Chen Qinghe . txt ');$gb-message($pen,$book,$ message);echo $ GB-view($ book);//$ GB-delete($ book);这看起来比面向对象的过程复杂得多吗?真的很复杂,代码量增加,很难理解。似乎体现了优势。但是你有没有想过以下问题?
1.如果很多人负责完善这个留言簿,建立一些实体关系,一个人负责数据操作层的代码,是不是更容易分工?
2.如果我想进一步开发这个留言簿,把它记录在数据库里,或者增加分页功能呢?
要实现上面第二个问题提出的功能,只需在gookModel类中添加分页方法,代码如下
公共函数readByPage(){ $ handle=file($ this-bookPath);$ count=count($ handle);$page=isset($_GET['page'])?int val($ _ GET[' page ']): 1;if($ page 1 | | $ page $ count)$ page=1;$ pnum=9;$ begin=($ page-1)* $ pnum;$end=($begin $pnum) $count?$ count : $ begin $ pnumfor($ I=$ begin;$ i $ end$i ) { echo 'strong ',$i 1,'/strong ',$handle[$i],' br/';} for($ I=1;$ iceil($ count/$ pnum);$i ) { echo 'a href='?page='。$ I .“”rel=“外部nofollow”rel=“外部no follow”。$ I . '/a ';}}然后给前端控制器添加相应的动作,代码如下
公共函数view bypage(gbook model $ g){ return $ g-readByPage();}运行结果如下
只需要两个简单的步骤就可以实现所需的分页功能,现有的所有方法都不需要修改,只需要在相关的类中添加新的方法即可。当然,当实际单击时,这种分页是有问题的,因为操作不是分开的,而是都放在一个页面上。与上面的想法相反,留言簿也可以扩展到MySQL数据库。
这个程序只体现了一个非常简单的设计模式,这个程序还有很多需要改进的地方。每个程序员心里都有自己的OO。项目越大,越能体现模块划分和面向对象的好处。
以下是完整的代码
?php/留言实体类类消息{ public $ name//留言者姓名公共$电子邮件;//留言者联系方式公共$内容;//留言内容public function __set($name,$ value){ $ this-$ name=$ value;} public function __get($name) { if(!isset($ this-$ name)){ $ this-$ name=NULL;} }}/** * 留言本模型,负责管理留言本* $bookpath:留言本属性*/class gbook模型{ private $ bookPath//留言本文件私有$数据;//留言数据公共函数setBookPath($ book path){ $ this-book path=$ book path;}公共函数getBookPath(){ return $ this-bookPath;} public function open(){ } public function close(){ } public function read(){ return file _ get _ contents($ this-bookPath);}公共函数readByPage(){ $ handle=file($ this-bookPath);$ count=count($ handle);$page=isset($_GET['page'])?int val($ _ GET[' page ']): 1;if($ page 1 | $ page $ count)$ page=1;$ pnum=9;$ begin=($ page-1)* $ pnum;$end=($begin $pnum) $count?$ count : $ begin $ pnumfor($ I=$ begin;$ i $ end$i ) { echo 'strong ',$i 1,'/strong ',$handle[$i],' br/';} for($ I=1;$ iceil($ count/$ pnum);$i ) { echo 'a href='?页面=' .$ I。" " rel="外部nofollow"rel="外部不跟随.$ I . '/a ';} } //写入留言公共函数write($ data){ $ this-data=self :3360 safe($ data)-name .self :3360 safe($ data)-电子邮件上面写着:self :3360 safe($ data)-内容. PHP _ EOL返回FILE _ put _ contents($ this-bookPath,$this-data,FILE _ APPEND);} //模拟数据的安全处理,先拆包再打包公共静态函数safe($ data){ $ reflection=new ReflectionObject($ data);$ props=$ reflect-GetProperties();$ message box=new stdClass();foreach($ props as $ props){ $ ivar=$ props-getName();$ messagebox-$ ivar=trim($ props-getValue($ data));}返回$ messagebox}公共函数delete(){ file _ put _ contents($ this-bookPath,'现在是空的');} } class leave model { public function write(GBookMoDEL $ GB,$ data){ $ book=$ GB-GetBookPath();$ GB-写入($数据);//记录日志} }类authorControl {公共函数消息(离开model $ l,gbookModel $ g,message $data) { //在留言本上留言$l-write($g,$ data);}公共函数视图(gbookModel $g) { //查看留言本内容返回$ g-read();}公共函数view by page(gbook model $ g){ return $ g-readByPage();}公共函数delete(GBookMoDEL $ g){ $ g-delete();echo self :视图($ g);}}$message=新消息;$ message-name=' Chen琼河;$ message-email='[电子邮件保护]';$message-content='陈琼河是个实干家;$ GB=新的AuthorCONtrol();//新建一个留言相关的控制器$ pen=new LeveModel();//拿出笔$ book=new GBookMoDEL();//翻出笔记本$ book-setBookPath(' e : \ \陈永和。txt’);$gb-message($pen,$book,$ message);//echo $ GB-view($ book);echo $ GB-viewByPage($ book);//$ GB-delete($ book);更多关于服务器端编程语言(专业超文本预处理器的缩写)相关内容感兴趣的读者可查看本站专题: 《PHP+MySQL留言板开发专题》 、 《php缓存技术总结》 、 《PHP数组(Array)操作技巧大全》 、 《php字符串(string)用法总结》 、 《PHP错误与异常处理方法总结》 、 《php面向对象程序设计入门教程》 、 《php+mysql数据库操作入门教程》 及《php常见数据库操作技巧汇总》
希望本文所述对大家服务器端编程语言(专业超文本预处理器的缩写)程序设计有所帮助。
版权声明:基于面向对象实现的PHP留言簿功能示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。