仓酷云

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

[学习教程] PHP网页编程之PHP中完成面向对象编程(下)

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

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

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

x
第1步环境配置好了,你算了进了1小步了,那么第2步呢 就是调出第1个程序 一般都是用hello world,视频教程里面我都做了,hello world编程|对象   多态性

  多态性被界说为当在运转时辰一个对象作为参数传递时,对象能决意挪用谁人办法的才能。例如,用一个类界说了办法 "draw",承继类重界说 "draw" 的行动来画圆或正方形,如许你就有一个参数为 x 的函数,在函数里可以挪用$x->draw(). 假如撑持多态性,那末 "draw" 办法的挪用就取决于对象 x 的类型。多态性在PHP中很天然被撑持(想想这类情形在C++编译器中假如编译,那一个办法被挪用?但是你不晓得对象的类型是甚么,固然如今不是这类情形)。

  幸亏PHP撑持多态性。

function niceDrawing($x) {
//Supose this is a method of the class Board.
$x->draw();
}

$obj=new Circle(3,187);
$obj2=new Rectangle(4,5);

$board->niceDrawing($obj); //will call the draw method of Circle.
$board->niceDrawing($obj2); //will call the draw method of Rectangle.

?>
  PHP的面向对象编程

  纯对象论者以为PHP不是真实的面向对象言语,这是对的。PHP是一种夹杂言语,你可以用面向对象或传统布局编程的办法来利用它。关于大型工程,但是你能够或需求利用纯面向对象办法来界说类,并在你的工程中只利用对象和类。愈来愈大的工程经由过程利用面向对象的办法会取得好处,面向对象工程十分轻易保持,轻易了解而且重用。这是软件工程的根基。利用这些概念在网站设计中是将来胜利的关头。

  PHP中的初级面向对象手艺

  在回忆面向对象的根基概念以后,我将引见一些更初级的手艺。

  串行化

  PHP其实不撑持耐久性对象,在面向对象言语中耐久性对象是一些经由使用法式屡次挪用依然坚持其形态和功效的对象,这意味着有一种能保留对象到文件或数据库中然后从头装载对象。这类机制称之为串行化。PHP 有一个串行化函数,可以在对象中挪用,串行化函数前往一个字符串代表这个对象。然后串行化函数保留的是成员数据而不是成员函数。

  在PHP4中,假如你串行化一个对象到字符串 $s, 然后删除此对象,再反串行化对象到 $obj, 你依然可以挪用对象的办法函数。但我不保举这类办法,这由于(a)这类功效在未来纷歧定撑持(b)这招致一种幻象,假如你保留串行化对象到磁盘并加入法式。未来从头运转此剧本时你不克不及反串行化此对象并但愿对象的办法函数仍无效,由于串行化出来的字符串并没有暗示任何成员函数。最初,串行化保留对象的成员变量在PHP中十分有效,仅仅如斯. (你可以串行化结合数组和数组到磁盘里)。

  例子:

$obj=new Classfoo();
$str=serialize($obj);
// Save $str to disk

//...some months later

//Load str from disk
$obj2=unserialize($str)

?>
  上例中,你可以恢复成员变量而没有成员函数(依据文档)。这招致 $obj2->x 是独一的办法来存取成员变量(由于没有成员函数)。

  这里还有一些办法处理这个成绩,但我留下给你由于它会弄脏这个洁净的文档。

  我但愿PHP未来能周全撑持串行化。

  利用类来把持保留的数据

  PHP和面向对象编程中一个对照好的中央是你很轻易界说类来把持某些器材,而且当需求时挪用适合的类。假定有一个HTML文件,你需求经由过程选择产物的ID号来选择一个产物,你的数据保留在数据库中,而你想显示产物的信息,如价钱等等。你有分歧品种的产物,一样的举措对分歧的产物有分歧的寄义。

  例如,显示一个声响意味着播放它,而对其他产物来讲多是显示一个存储在数据库的图片。你可以用面向对象编程和PHP来到达,代码少但更好。

  界说一个类,界说类应当有的办法,然后经由过程承继来界说每种产物的类(SoundItem类, ViewableItem类,等等),重界说每一个产物类的办法,使它们如你所需。依据你保留在数据库中的表的产物类型字段来给每种产物类型界说一个类,一个典范的产物表应有字段(id, 类型, 价钱, 描写,等等)。

  在剧本中你从数据库的表中获得类型信息,然后实例化响应类的对象:

$obj=new $type();
$obj->action();

?>
  这是PHP对照的特征,你可以挪用 $obj 的显示办法或其他办法而不必去管对象的类型。经由过程这类手艺,当你增添一种新类型的对象时,你不需求去修正剧本。这个办法有点威力,就是界说一切对象应有的办法而不论它的类型,然后在分歧的类中以分歧的体例来完成,如许就能够在剧本中对分歧的类型对象利用他们,再没有 if, 没有两个法式员在统一个文件里,永久康乐。你信任编程是如许康乐不?保护价值小而且可重用?

  假如你率领一组法式员,最好的办法是划分义务,每人可以对某品种和对象担任。国际化可以用一样的手艺处理,使适合的类对应利用者选择的分歧的言语等等。

  复制和克隆

  当你创立一个对象 $obj, 你可使用 $obj2 = $obj 来拷贝一个对象,新的对象是 $obj 的一个拷贝(不是援用),所以在赋值完新对象有 $obj 同新的形态。有时分你不想如许,只想创立和 obj 一样的新对象,挪用新对象的机关函数好像你曾利用过 new 号令。这可以经由过程PHP的串行化和利用基类而且其他类必需从基类承继来到达。

  停止风险的地带

  当你串行化一个对象,你失掉一个有特定格局的字符串,假如你有猎奇心,能够你会探访个中的奥密,字符串中有一个器材就是类的名字,你可以解开它:

$herring=serialize($obj);
$vec=explode(:,$herring);
$nam=str_replace("\"",\,$vec[2]);

?>
  假定你创立一个类 "Universe" 而且使一切类都从 "Universe" 承继而来,你可以在 "Universe" 界说一个克隆的办法:

class Universe {
 function clone() {
  $herring=serialize($this);
  $vec=explode(:,$herring);
  $nam=str_replace("\"",\,$vec[2]);
  $ret=new $nam;
  return $ret;
 }
}

//Then:

$obj=new Something();
//Something extends Universe !!
$other=$obj->clone();

?>
  你所得的是类 Something 的新对象好像利用 new 一样,而且机关函数被挪用等等。我不晓得这对你是否是有效,这是一个很好的理论,Universe 类晓得它的承继类的名字。对你来讲,独一的限制是你的想象力!!!

  注重:我利用的是PHP4, 文章里有些器材能够不合适PHP3。  参加PHP开发学习,或许只是一次偶然的想法吧!只是想在走向社会之前体验、学习在一个公司或者说是项目团队之中如何去更有效的沟通、交流、共同合作,还有就是为毕业实习找工作增加伐码。
小女巫 该用户已被删除
沙发
发表于 2015-2-4 13:13:47 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-2-9 23:14:51 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
蒙在股里 该用户已被删除
地板
发表于 2015-2-11 19:06:28 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
只想知道 该用户已被删除
5#
发表于 2015-2-13 06:07:27 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
兰色精灵 该用户已被删除
6#
发表于 2015-3-1 18:54:10 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
萌萌妈妈 该用户已被删除
7#
 楼主| 发表于 2015-3-7 14:45:43 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
小妖女 该用户已被删除
8#
发表于 2015-3-17 07:08:08 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
简单生活 该用户已被删除
9#
发表于 2015-3-24 00:32:22 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
第二个灵魂 该用户已被删除
10#
发表于 2015-3-27 00:09:46 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
莫相离 该用户已被删除
11#
发表于 2015-4-1 03:34:51 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
再现理想 该用户已被删除
12#
发表于 2015-4-3 01:49:05 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
变相怪杰 该用户已被删除
13#
发表于 2015-4-7 06:57:26 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
柔情似水 该用户已被删除
14#
发表于 2015-4-10 07:10:03 | 只看该作者
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
再见西城 该用户已被删除
15#
发表于 2015-4-15 21:38:23 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
不帅 该用户已被删除
16#
发表于 2015-4-16 00:13:01 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
若天明 该用户已被删除
17#
发表于 2015-4-16 15:12:53 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
金色的骷髅 该用户已被删除
18#
发表于 2015-4-21 16:29:48 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
海妖 该用户已被删除
19#
发表于 2015-4-30 03:45:23 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
飘飘悠悠 该用户已被删除
20#
发表于 2015-5-2 03:23:25 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-14 13:12

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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