仓酷云

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

[学习教程] PHP网页设计开辟大型PHP项目标办法(二)

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

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

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

x
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。项目   多态
  多态是对象的一种才能,它可以在运转时辰依据传递的对象参数,决意挪用哪个对象的办法。例如,
假如你有一个figure的类,它界说了一个draw的办法。而且派生了circle和rectangle 类,在派生类中你覆
盖了draw办法,你能够还有一个函数,它但愿利用一个参数x,而且可以挪用$x->draw() 。假如你有多态性,
挪用哪一个draw办法就依附于你传递给这个函数的对象类型。

  多态性在象PHP如许的注释言语(想象一下一个C++编译器生成如许的代码,你应当挪用哪个办法?你
也不晓得你具有的对象是甚么类型的,好,这不是重点)长短常轻易和天然的。所以PHP固然撑持多态性。



<?php

function niceDrawing($x) {

//假定这是Board类的一个办法
$x->draw();
}

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

$board->niceDrawing($obj);
//将挪用Circle的draw办法

$board->niceDrawing($obj2);
//将挪用Rectangle的draw办法

?>


用PHP停止面向对象编程
  一些"纯化论者(purists)"能够会说PHP不是一个真实的面向对象的言语,这是现实。PHP 是一个夹杂型
言语,你可使用OOP,也能够利用传统的进程化编程。但是,关于大型项目,你能够想/需求在PHP 中利用
纯的OOP去声明类,并且在你的项目只用对象和类。

  跟着项目愈来愈大,利用OOP能够会有匡助,OOP代码很轻易保护,轻易了解和重用。这些就是软件工程
的基本。在基于web的项目中使用这些概念就成为未来网站胜利的关头。
PHP的初级OOP手艺
  在看过根基的OOP概念后,我就能够向你展现更初级的手艺:

序列化(Serializing)
  PHP不撑持永世对象,在OOP中永世对象是可以在多个使用的援用中坚持形态和功效的对象,这意味着拥
有将对象保留到一个文件或数据库中的才能,并且可以在今后装入对象。这就是所谓的序列化机制。PHP 拥
有序列化办法,它可以经由过程对象停止挪用,序列化办法可以前往对象的字符串暗示。但是,序列化只保留了
对象的成员数据而不包话办法。

  在PHP4中,假如你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象到$obj,你可以持续
利用对象的办法!我不建议如许去做,由于(a)文档中没有包管这类行动在今后的版本中依然可使用。(b)
这个能够招致一种曲解,在你把一个序列化后的版本保留到磁盘并加入剧本时。当今后运转这个剧本时,你
不克不及等候着在反序列化一个对象时,对象的办法也会在那边,由于字符串暗示基本就不包含办法。

  总而言之,PHP 停止序列化关于保留对象的成员变量十分有效。(你也能够将相干数组和数组序列化到
一个文件中)。

例子 :

-----------------------------------------------------
<?php

$obj=new Classfoo();
$str=serialize($obj);

//保留$str到磁盘上


//几个月今后


//从磁盘中装入str

$obj2=unserialize($str)

?>---------------------------------------------------
  
你恢复了成员数据,然而不包含办法(依据文档所说)。这招致了只能经由过程相似于利用$obj2->x来存取
成员变量(你没有其余办法!)的独一举措,所以不要在家里试它。

  有一些举措可以处理这个成绩,我把它留着,由于对这篇简约的文章来讲,他们太欠好。

  我会很乐意地接待在PHP的后续版本中有全序列化的特征。

利用类停止数据存储
  关于PHP和OOP一件十分好的工作就是,你可以很轻易地界说一个类来操作某件工作,而且不管什么时候你想
用的时分都可以挪用响应的类。假定你有一个HTML表单,用户可以经由过程选择产物ID号来选择一个产物。在数
据库中有产物的信息,你想把产物显示出来,显示它的价钱等等。你具有分歧类型的产物,而且统一个举措
能够对分歧的产物具有分歧的意思。例如,显示一个声响能够意味着播放它,然而关于其它品种的产物能够
意味着显示一个存在数据库中的图片。你可使用OOP或PHP来削减编码并进步质量:

  界说一个产物的类,界说它应当有的办法(例如:显示),然后界说对每品种型的产物的类,从产物
类派后出来(SoundItem类,ViewableItem类,等等),掩盖在产物类中的办法,使它们按你的设法举措。

  依据数据库中每种产物的类型(type)字段给类定名,一个典范的产物表能够有(id, type, price,
description, 等等字段)...然后在处置剧本中,你可以从数据库中掏出type值,然后实例化一个名为type
的对象:



-----------------------------------------------------
<?php

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

?>---------------------------------------------------
 
 这是PHP的一个十分好的特征,你可以不必思索对象的类型,挪用$obj的显示办法或其它的办法。利用
这个手艺,你不需求修正剧本去增添一个新类型的对象,只是增添一个处置它的类。

  这个功效很壮大,只需界说办法,而不去思索一切对象的类型,在分歧的类中按分歧的办法完成它们,然后在主剧本中对恣意对象利用它们,没有if...else,也不需求两个法式员,只要乐意。

  如今你赞同编程是轻易的,保护是廉价的,可重用是真的吗?

  假如你办理一组法式员,分派任务就是很复杂的了,每一个人能够担任一个类型的对象和处置它的类。

  可以经由过程这个手艺完成国际化,依据用户所选的言语字段使用响应的类就能够了,等等。


拷贝和克隆
  当你创立一个$obj的对象时,你可以经由过程$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一
个援用),所以它具有$obj在事先的形态。有时分,你不想如许,你只是想生成一个象obj类一样的一个新
的对象,可以经由过程利用new语句来挪用类的机关函数。在PHP中也能够经由过程序列化,和一个基类来完成,但所
有的其它类都要从基类派生出来。



进入风险区域
  当你序列化一个对象,你会失掉某种格局的字符串,假如你感乐趣,你可以调究它,个中,字符串中有
类的名字(太好了!),你可以把它掏出来,象:

-----------------------------------------------------
<?php

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

?>---------------------------------------------------
 
 所以假定你创立了一个"Universe"的类,而且强迫一切的类都必需从universe扩大,你可以在universe
中界说一个clone的办法,以下:
-----------------------------------------------------
<?php

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

//然后
$obj=new Something();

//从Universe扩大
$other=$obj->clone();

?>---------------------------------------------------
 
 你所失掉的是一个新的Something类的对象,它同利用new办法,挪用机关函数创立出的对象一样。我不
晓得这个对你是不是有效,然而Universe类可以晓得派生类的名字是一个好的经历。想象是独一的限制。

  注重:我用的是PHP4,我写的有些器材在PHP3下能够不克不及任务。

<全文完>
  现在,也有了从事软件工程的想法,在经过了一个月的PHP培训学习之后,发现其实软件工程并没有想像中的那么难。
沙发
发表于 2015-2-4 10:14:06 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
精灵巫婆 该用户已被删除
板凳
发表于 2015-2-5 11:55:57 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
简单生活 该用户已被删除
地板
发表于 2015-2-11 16:34:39 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-20 17:51:16 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
小妖女 该用户已被删除
6#
发表于 2015-3-6 18:30:30 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
小魔女 该用户已被删除
7#
发表于 2015-3-13 05:09:55 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-20 13:33:57 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
乐观 该用户已被删除
9#
发表于 2015-3-27 01:10:57 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
小女巫 该用户已被删除
10#
发表于 2015-4-3 20:19:10 | 只看该作者
爱上php,他也会爱上你。
愤怒的大鸟 该用户已被删除
11#
发表于 2015-4-5 11:05:47 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
谁可相欹 该用户已被删除
12#
发表于 2015-4-10 03:51:32 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
爱飞 该用户已被删除
13#
发表于 2015-4-13 02:15:28 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
飘灵儿 该用户已被删除
14#
发表于 2015-4-14 06:45:58 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
透明 该用户已被删除
15#
发表于 2015-4-14 08:10:42 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
因胸联盟 该用户已被删除
16#
发表于 2015-4-16 03:07:53 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
只想知道 该用户已被删除
17#
发表于 2015-4-16 19:11:39 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
分手快乐 该用户已被删除
18#
发表于 2015-4-18 09:21:24 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
山那边是海 该用户已被删除
19#
发表于 2015-4-21 07:07:59 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
不帅 该用户已被删除
20#
发表于 2015-4-25 03:45:43 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 05:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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