仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1707|回复: 18
打印 上一主题 下一主题

[学习教程] PHP编程:PHP中的面向对象和面向进程

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
只要实现最基本的功能就可以了 就是可以添加留言 然后可以显示留言,然后加入管理功能对象|进程   简介
“真实的天赋具有准确评价不肯定的,有风险的和抵触的信息的才能。--邱吉尔”
利用很多编程言语时,你凡是只能利用面向对象或面向进程两者之一的编程体例。而在PHP中,你可以自在选择或混用。今朝绝大多半PHP法式员利用面向进程的体例,由于解析WEB页面自己就十分“进程化”(从一个标签到另外一个标签)。在HTML中嵌入进程处置代码是很直接天然的作法,所以PHP法式员凡是利用这类体例。
假如你是刚接触PHP,用面向进程的作风来书写代码极可能是你独一的选择。然而假如你常常上PHP服装论坛和旧事组的话,你应当会看到有关“对象”的文章。你也能够看到过若何书写面向对象的PHP代码的教程。或你也能够下载过一些现成的类库,并测验考试着去实例化个中的对象和利用类办法--虽然你能够没有真正了解这些类为何可以任务,或为何需求利用面向对象的办法来完成功效。
应当利用“面向对象”的作风仍是“面向进程”的作风?两边各有撑持者。像“对象是低效的”或“对象十分棒”如许的群情也时有耳闻。本文不测验考试等闲剖断两种办法的哪一种具有相对的优势,而是要找出每种办法的优弱点。
以下是面向进程作风的代码示例:
<?php
print "Hello, world.";
?>

以下是面向对象作风的代码示例:
<?php
class helloWorld {
function myPrint() {
print "Hello, world.";
}
}
$myHelloWorld = new helloWorld();
$myHelloWorld->myPrint();
?>

假如你想懂得一些“面向对象”的根基常识,请利用Google搜刮,收集上有十分多出色的文章。
谁像如许写代码?
为了了解为何这个论题成为服装论坛上口水战的导前方,咱们看一些每一个阵营的对照极真个例子。咱们看看“进程狂热”和“对象狂热”。看看他们的概念听起来是否是有点熟习。
进程狂热
进程狂热曾在上课时被盘算机教员品评,由于这类办法没有利用加倍笼统的完成体例。而撑持面向进程者的概念“它可以任务!”其实不能进步其编程程度和层次。卒业后他们能够找到一个任务,写驱动法式,文件体系或其它的倾向底层的编程,他们的注重力集中于速度和代码的精华精辟。
“进程狂热”极真个例子是抵抗对象,抵抗笼统化。他们总在想着若何让法式运转起来更快,而不在意他人是不是能读懂他们的代码。他们经常把编程当做比赛而不是团队举动。除PHP外,他们最喜欢的编程言语是C和汇编。在PHP世界中他们能够会开辟PECL模块,奉献出高效力的代码。
对象狂热
对象狂热者热中于在任什么时候候利用面向对象的作风来书写代码。他们没有真正思索过用这类体例是不是会影响法式的履行效力。有时分让人感觉他们更享用笼统的设计概念而不是实际的代码。他们凡是极可能是项目办理者或文档书写者。
对象狂热者指出,假如没有笼统的设计办法咱们依然在利用0和1停止编程。他们喜好用伪码来描写成绩。极真个例子是对象狂热者即便晓得有时分会就义效力依然利用对象。 除PHP,他们最喜好的言语是Java和Smalltalk。在PHP世界中,他们能够会开辟PEAR模块,奉献文档化十分好,易于保护的代码。
不要过火和取笑
你晓得为何服装论坛上老是充溢着各类成见吗?你的经历经历,你对新事物的立场都多是缘由。作为法式员,咱们需求经常注重这些成见并以开放的心态去进修新事物。
你的编码偏向?
思索一下当你书写PHP代码时有甚么偏好或偏向。凡是这些偏好是对照隐晦的。有时分你能够在每一个项目中有着一样的偏好。我团体偏向于“优雅”,但我不想在此界说若何才是“优雅”的代码,那应该呈现在另外一篇文章里。然而,实际化的偏好纷歧定合适于实践项目―相反地,他们经常是一种成见。
实际化的偏向
• 用起码行数的代码供应一个完全的处理计划
• 在成绩条理上思索成绩
这听起来仿佛很不错。但“代码行数起码”若何来权衡呢?要把代码正文算在内吗? 咱们是不是要把每行都串起来而只用分号来辨别呢?大括号呢? 很分明这类设法是毛病的。
再注释一下甚么是“成绩条理”。这是不是意味着在咱们的计划中的每一个概念都需求创立一个类?或需求在每一个自力的文件里坚持成绩的每一个局部,并创立一个庞杂的文件树来与实际中的成绩绝对应?就是如许的设法--为每一个设法筹办一个文件或类!
很分明这些归纳综合极端化后变得好笑。但实际中存在更奇妙的证实。是不是经常会有法式员在团队协作时拔出一行庞杂的,壮大的但没有正文的代码?这关于接办保护这些代码的人来讲无疑长短常使人懊丧的事。 相反地,是不是你的权要的自觉得是的上一级法式员经常“横冲直撞”般地,创立接口和类? 而那些接口和类不单单限制了担任完成的法式员,也限制了效力和天真性,招致客户请求扩大法式时七手八脚。 这些都是以上各类偏向的奇妙的证实。
实践偏向
一个项目入手下手的时分,起首要追求实践的编码目标和偏向。这个项目标完成方针是甚么?上面是多是谜底。
• 开辟快,宣布快
• 尽量快地运转
• 易于保护,改善和扩大
• 宣布一个API

第1、二个偏向偏向于利用进程化的作风,而最初两个偏向于利用面向对象的作风。
甚么时分某种体例更无效?
如今让咱们试着评价每种体例在实际中的优势。
面向进程案例
有关PHP的面向进程化编程优势的一个基本性的论据是:PHP是一个注释性的言语--这意味着,不像其它的言语一样,它不会被编译成一个可履行的包,而是被注释并即刻履行。它是一种剧本言语并存储于文本文件中(破例的,假如利用了Zend编译东西)。
另外一个否决在PHP4及更低版本中利用面向对象体例停止编码的来由是:在PHP的初期版本中对象的功效并没有经由优秀设计。就像Rasmus曾说过的:“那是过后才想起要增添的功效”。这意味着在PHP4及更早的版本中,对象的效力是个成绩。但PHP5出来后,这类情况会有改不雅。
以下两个最盛行的PHP法式--OsCommerce 和PhpMyAdmin.次要利用面向进程的编码体例。它们构建起来很快,运转起来也很快。二者都很天然地采取嵌入HTML的办法。
OsCommerce
OsCommerce实践上利用了良多对象,但绝大局部功效是经由过程“进程”来完成的。我已经hack过OsCommerce,为其增加一些关于客户十分适用的自界说功效。这个进程是挺费事的,由于OsCommerce中的良多进程代码,没有利用模板化的体系,而且设计成多言语版,所以需求花必定的工夫才干上手。然而它可以任务,现实上它已很好地运转在数量浩瀚的电子商务站点上了。OsCommerce同时供应了一个服装论坛和一个开辟框架用来开辟模块和插件。因而,如今已有了良多其它开辟者供应的适用的功效模块。
PhpMyAdmin
PhpMyAdmin直接利用的类只要一个:Mimer SQL Validator类,依附于PEAR包中的Mail_Mime, Net_DIME 和 SOAP。这多是思索到开辟的便利:使用现成的可以完成目标的代码。除此以外,一切都是面向进程的,HTML和PHP代码也是混同在一同。
PhpMyAdmin是我几近天天都要用到的一个东西,用来对大批的数据表停止不太庞杂的处置。有时我乃至勉励我的客户将它看成后真个办理东西来利用(固然我会限制他们的权限)。PhpMyAdmin的体现十分棒,也很快。有时我想在一些项目中扩大PhpMyAdmin作为后真个办理东西,使用它的一些新功效如数据查询语句书签可以很便利地展现给我的客户和编纂。跟着每一个新版本的推出,PhpMyAdmin愈来愈适用,功效愈来愈壮大。
面向进程小结
以上两个利用面向进程作风的法式都有十分好的文档和代码正文。OsCommerce供应的开辟框架可以增添保护性和扩大性。然而二者都没有供应API,不克不及扩大法式到别的的系统中。
假如你想把OsCommerce整合到一个帐单法式中,需求消费大批的工夫和精神,就像扩大PhpMyAdmin成一个供客户利用的后端办理东西。不外从它们设计的目标来看,的确在各自的范畴中都体现地很精彩。
面向对象案例
撑持面向对象作风者的概念都集中于扩大性和封装。仅仅用面向对象的体例来写代码不会为你的代码发生文档,但它可以勉励你为之添加文档。而且,为了易于扩大,你能够会写一个API。 PHP5允诺让面向对象编程加倍兴奋。我开顽笑地将它称为PHP中的”Java 2”版本,由于它整合了Java中的很多特征,像接口,面向对象模子,try-catch语句等。但即便在对面向对象撑持不
力的PHP4中,依然呈现了很多精彩的面向对象使用法式。

Smarty
Smarty用来构建带有庞杂表单并基于模板的站点。比来,我写了一个可以完整换“皮肤”的在线测验体系―可以不必改动任何底层的代码和功效就能够将全部站点的外不雅界面和作风完整改动。为了让设计师可以易于设计新的界面,我设计了一个自界说的标签库作为Smarty标签库的扩大。可以像如许复杂地拔出:
[navigation horizontal separated by " | "]
在一个页面的顶端有分离隔的导航。 由于Smarty已供应了十分壮大的机制来体现变量中包括的数据,这是一个映照较庞杂的Smarty标签到skin标签的复杂进程。关于这个的更多信息请看:http://simplequiz.peakepro.com/
因为Smarty封装成一个类,而且它的办法都有很详实的文档,使得利用模板的进程变得使人难以相信地易于扩大。同时,经由过程强迫性地只能显式地传递你要利用的变量给Smarty模板的办法,Smarty也为PHP的情况变量供应了一个回护层。这类办法有助于在Smarty模板设计师和法式员间创立平安、牢靠的任务关系。
FPDF
FPDF是一个十分优异的东西。假如你被改来改去的pdflib的API所猜疑,或不肯为贸易化的处理计划而交钱;或因为同享主机的限制,没法利用扩大模块―请思索利用这个收费的,纯PHP构建的PDF生成东西。
这个类有很好的文档,包含很多很好的例子来论述若何在PDF中结构文本和图片。在下面提到的统一个在线进修站点我利用FPDF来静态生成PDF文件,利用true type字体和300dpi精度的图象。在PHP中实例化FPDF类并停止PDF操作其实不会消费太多额定的工夫,由于PDF自己便可能需求消费几分钟来下载。现实上,静态生成并传送一个PDF所花的工夫不比当利用一个慢速的收集毗连来传送静态PDF文件所花的工夫多。这都是绝对而言的。而且,因为FPDF是基于类的,他可以被扩大。现实上,有些类办法固然存在但还没有完整完成,仅作为一个框架,这可觉得你在子类中创立你本人的内容(如自界说的头尾元素)供应导游。
FPDF
FPDF是一个十分优异的东西。假如你被改来改去的pdflib的API所猜疑,或不肯为贸易化的处理计划而交钱;或因为同享主机的限制,没法利用扩大模块―请思索利用这个收费的,纯PHP构建的PDF生成东西。
这个类有很好的文档,包含很多很好的例子来论述若何在PDF中结构文本和图片。在下面提到的统一个在线进修站点我利用FPDF来静态生成PDF文件,利用true type字体和300dpi精度的图象。在PHP中实例化FPDF类并停止PDF操作其实不会消费太多额定的工夫,由于PDF自己便可能需求消费几分钟来下载。现实上,静态生成并传送一个PDF所花的工夫不比当利用一个慢速的收集毗连来传送静态PDF文件所花的工夫多。这都是绝对而言的。而且,因为FPDF是基于类的,他可以被扩大。现实上,有些类办法固然存在但还没有完整完成,仅作为一个框架,这可觉得你在子类中创立你本人的内容(如自界说的头尾元素)供应导游。
面向对象小结
Smarty和FPDF都供应了带有优秀文档的API来扩大主类。这申明了在类的外部组织办法和数据的需要性--有时一样的功效可以用函数和全局变量来完成,但如许不容易于扩大。而且,利用对象对跟踪和坚持PDF或HTML文档的作风十分有匡助,你可以将一样的数据用分歧的格局来宣布。Smarty和FPDF都是利用对象来创立天真适用的类库的极好的例子。
为何两种体例都是必须的?
回到咱们充斥热忱的法式员身上,咱们入手下手嘉赞他们:
• 咱们浏览Smarty和FPDF的适用性和扩大性
• 咱们浏览osCommerce和phpMyAdmin的运转速度和优秀体现
这类浏览还包含对PHP的一些基本开辟。PECL和PEAR都收到了良多赞美和品评。我想这两个项目为说明面向进程和面向对象编程的区分供应了很好的例子。
PECl供应了PHP的扩大库,用C和面向进程的体例开辟,重视速度和简约精华精辟。凡是,这些都是从已存在的LGPL软件中移植而来,个中很多风趣的特征已到场PHP。究竟,PHP是用C写的。
PEAR则奉献了良多风趣的类如创立Excel表或改动DNS纪录等。利用PEAR类库可觉得你勤俭大批工夫,乃至可让你在不怎样熟习PHP的情形停止开辟―“我不睬解但它能用!”。
总结
但愿本文能加深你对两种编程体例的了解,而且更主要地―勉励你在更详细的细节长进行探究。我但愿你会有本人的设法,并在实践开辟中查验你的项目开辟偏向,总结出更多实践的案例,其实不啬写些针对本文的评论。
总之,每种体例都有其优势的一面,纠缠于争辩不如分开去写些实践的代码!
  到现在,对排版还是不很熟练,经常会排不好。
谁可相欹 该用户已被删除
沙发
发表于 2015-2-4 13:13:07 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
金色的骷髅 该用户已被删除
板凳
发表于 2015-2-5 05:04:40 | 只看该作者
做为1门年轻的语言,php一直很努力。
地板
发表于 2015-2-9 00:18:46 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
飘灵儿 该用户已被删除
5#
发表于 2015-2-28 00:45:38 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-7 05:59:01 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
分手快乐 该用户已被删除
7#
发表于 2015-3-8 17:14:26 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
山那边是海 该用户已被删除
8#
发表于 2015-3-13 08:28:00 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
兰色精灵 该用户已被删除
9#
发表于 2015-3-20 13:22:38 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
只想知道 该用户已被删除
10#
发表于 2015-3-28 21:45:08 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
第二个灵魂 该用户已被删除
11#
发表于 2015-4-1 17:13:50 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
冷月葬花魂 该用户已被删除
12#
发表于 2015-4-3 05:28:09 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
爱飞 该用户已被删除
13#
发表于 2015-4-7 15:50:29 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
再现理想 该用户已被删除
14#
发表于 2015-4-13 14:00:17 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
精灵巫婆 该用户已被删除
15#
发表于 2015-4-20 20:41:11 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
海妖 该用户已被删除
16#
发表于 2015-5-4 21:33:20 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
因胸联盟 该用户已被删除
17#
发表于 2015-5-4 23:16:00 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
小妖女 该用户已被删除
18#
发表于 2015-5-6 01:55:46 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
老尸 该用户已被删除
19#
发表于 2015-5-9 21:34:18 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-6 00:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表