还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
php php介绍php发展php培训php培php PHP语言简介PHP独特的语法混合了C、Java、Perl以及PHP自创新的语法它可以比CGI或者Perl更快速的执行动态网页用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统发展PHP于1994年由Rasmus Lerdorf创建,刚刚开始只是一个简单的用Perl语言编写的程序,用来统计他自己网站的访问者后来又用C语言重新编写,包括可以访问数据库在1995年以Personal HomePage ToolsPHPTools开始对外发表第一个版本,Lerdorf写了一些介绍此程序的文档,并且发布了PHP
1.0在这早期的版本中,提供了访客留言本、访客计数器等简单的功能以后越来越多的网站使用了PHP,并且强烈要求增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在1995年中,PHP
2.0发布了第二版定名为PHP/FIForm InterpreterPHP/FI加入了对mySQL的支持,从此建立了PHP在动态网页开发上的地位到了1996年底,有15000个网站使用PHP/FI;1997年中,使用PHP/FI的网站数字超过五万个而在1997年中,开始了第三版的开发计划,开发小组加入了Zeev Suraski及Andi Gutmans,而第三版就定名为PHP32000年,PHP
4.0又问世了,其中增加了许多新的特性PHP的简称原本为Personal HomePage,是Rasmus Lerdorf为了要维护个人网页,而用c语言开发的一些CGI工具程序集,来取代原先使用的Perl程序最初这些工具程序用来显示Rasmus Lerdorf的个人履历,以及统计网页流量他将这些程序和一些表单直译器整合起来,称为PHP/FIPHP/FI可以和数据库连接,产生简单的动态网页程序Rasmus Lerdorf在1995年6月8日将PHP/FI公开释出,希望可以透过社群来加速程序开发与寻找错误这个释出的版本命名为PHP2,已经有今日PHP的一些雏型,像是类似Perl的变量命名方式、表单处理功能、以及嵌入到HTML中执行的能力程序语法上也类似Perl,有较多的限制,不过更简单、更有弹性在1997年,任职于Technion IIT公司的两个以色列程序设计师Zeev Suraski和Andi Gutmans,重写了PHP的剖析器,成为PHP3的基础,而PHP也在这个时候改称为PHP HypertextPreprocessor.
[5]经过几个月测试,开发团队在1997年11月释出了PHP/FI2,随后就开始PHP3的开放测试,最后在1998年6月正式释出PHP3Zeev Suraski和Andi Gutmans在PHP3释出后开始改写PHP的核心,这个在1999年释出的剖析器称为Zend Engine
[7],他们也在以色列的Ramat Gan成立了Zend Technologies来管理PHP的开发在2000年5月22日,以Zend Engine
1.0为基础的PHP4正式释出,2004年7月13日则释出了PHP5,PHP5则使用了第二代的Zend Engine
[5]PHP包含了许多新特色,像是强化的面向对象功能、引入PDOPHP DataObjects,一个存取数据库的延伸函数库、以及许多效能上的增强目前PHP4已经不会继续更新,以鼓励用户转移到PHP52008年PHP5成为了PHP唯一的有在开发的PHP版本将来的PHP
5.3将会加入Late staticbinding和一些其他的功能强化PHP6的开发也正在进行中,主要的改进有移除register_globals、magic quotes和Safe mode的功能特性PHP的特性包括开放的源代码所有的PHP源代码事实上都可以得到PHP是免费的php的便捷性php十分便捷,学习简单基于服务器端由于PHP是运行在服务器端的脚本,可以运行在UNIX、LINUX、WINDOWS下嵌入HTML因为PHP可以嵌入HTML语言,所以学习起来并不困难简单的语言PHP坚持脚本语言为主,与Java和C++不同效率高PHP消耗相当少的系统资源图像处理用PHP动态创建图像面向对像在php4,php5中,面向对象方面都有了很大的改进,现在php完全可以用来开发大型商业程序PHP相对于其他语言,编辑简单,实用性强,更适合初学者技术应用1,伪静态2,静态页面生成3,数据库缓存4,过程缓存5,div+css w3c标准6,大负荷7,分布式8,jquery框架集成9,flex10,桌面程序应用PHP3与PHP4【PHP3】PHP3跟Apache服务器紧密结合的特性;加上它不断的更新及加入新的功能;而且几乎支持所有主流与非主流数据库;再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000加上它的源代码完全公开,在Open Source意识抬头的今天,它更是这方面的中流砥柱不断地有新的函数库加入,以及不停地更新的活力,使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能它提供丰富的函数,使得在程序设计方面有着更好的支持【PHP4】PHP
4.0整个脚本程序的核心大幅更动,让程序的执行速度,满足更快的要求在最佳化之后的效率,已较传统CGI或者ASP等程序有更好的表现而且还有更强的新功能、更丰富的函数库无论您接不接受,PHP都将在Web CGI的领域上,掀起巅覆性的革命对于一位专业的Web Master而言,它将也是必修课程之一PHP
4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比PHP
3.0要快,其脚本描述更强大并且更复杂,最显著的特征是速率比的增加PHP
4.0这些优异的性能是PHP脚本引擎重新设计产生的结果引擎由AndiGutmans和Zeev Suraski从底层全面重写PHP
4.0脚本引擎--Zend引擎,使用了一种更有效的编译--执行方式,而不是PHP
3.0采用的执行--当解析时模型PHP4的优越性PHP4在
3.0版的基础上增加或增强了许多有用的特征,主要如下1别名在PHP4中,可以利用引用为变量赋值,这给编程带来了很大的灵活性2扩充了API模块PHP
4.0为扩展的API模块的提供了扩展PHP接口模块,它比旧的API版本显著地快PHP模块已有的及最常用的接口多数被转换到使用这个扩展的接口3自动资源释放PHP4增加了引用计数功能,这种新技术的引入使PHP4具有了自动内存管理功能,减轻了开发人员的负担4布尔类型PHP
4.0支持布尔类型5进程生成在UNIX环境下的PHP
4.0提供了一个很智能和通用的生成进程,使用了一种名为基于automake/libtool的系统生成技术6COM/DCOM支持PHP
4.0提供COM/DCOM支持仅用于Windows环境可以无缝地存取和访问COM对象7与PHP
3.0兼容性很好PHP
4.0是与PHP
3.0代码向后兼容性接近100%由于PHP4的改进的体系结构,两者有一些细微的差别,但是大多数人将可能永远不可能遇上这种情况8配置PHP4重新设计和增强了PHP.ini文件,这使得用PHP.ini来配置PHP显得极为容易,这个文件可以在运行时被Apacheunix系统或由Windows注册Windows环境9加密支持PHP4实现了完整的加密,这些加密功能是一个完整的mycrypt库,并且PHP
4.0支持哈希函数Blowfish,TripleDES,MD5,并且SHA1也是可使用的一些加密算法10类型检查PHP
4.0支持同一操作符用于评类型检查===3等号运算符,为在两个值和其类型之间作检查例如,3===3将视为假类型是不同的,而3==3相等判断将视为真11FTP支持PHP
4.0支持FTP通常,你会为通过一个调制解调器连接下载一个大文件提供一个接口然而,如果你确实有需要,可以使用PHP12PHP4新增函数或功能增强函数PHP
4.0新增了许多函数,同时也将许多现有的函数功能进行了增强,以下是一些例子array_count_valueseval_rforeachncludeob_end_cleanob_end_flu shob_get_contentsob_startstrip_tagsunset13here打印PHP
4.0的Here打印是与Perl类似的,尽管完全不相同Here是打印大容量文章的一个有用的方法,例如在HTML文件中,不会漏掉任何一个字符,例如目录标记14HTTP Sessionfallback系统为HTTP Session管理的一个fallback系统在PHP
4.0被实现缺省情况下,Session标识符由cookies存储如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在URL的查询字符串中被携带15ISAPI支持PHP
4.0能作为一个个性化的ISAPI模块作为IIS插件这比PHP
3.0更有效,它作为一个外部的程序来运行16内存PHP
4.0能更有效的使用内存,导致较少的内存占用消耗,这主要归功于引用计数技术的实现17其他类成员函数在PHP
4.0你能在成员函数本身的作用域或全局范围内调用其他类的成员函数例如,你能用一个子函数覆盖父函数,并在子函数中调用父函数18多维数组在PHP
4.0,利用GET,POST,Cookies的进行的数据传输支持多维数组19个性化的HTTP Session支持HTTP Session处理,包括fallback系统管理,在PHP
4.0被它的新库函数实现在版本
3.0中处理Session要求使用PHPLIB和第三方的库函数,它比把Session直接地由PHP支持慢了许多20个性化的Java支持PHP
4.0支持和java的交互这种个性化的Java支持为PHP在Java对象上创建和使用方法提供一个简单并且有效的工具21对象和数嵌套组PHP
4.0实现了功能更加强大的对象,移去了PHP
3.0存在的种种句法限制对象能在数组以内被嵌套并且反过来也如此,可以根据你的需要实现嵌套22面向对象的编程PHP
4.0为面向对象的编程和构造类及对象提供扩展的功能和新特征PHP4实现了对象重载,引用技术等新技术23对象重载支持对象重载语法允许第三方的基于面向对象的类库使用PHP4的面向对象的特征存取他们自身的功能使用这个特征的一个COM模块已经被实现了24输出缓冲支持PHP提供了一个输出缓冲函数集合输出缓冲支持允许你写包裹函数功能压缩缓冲区在PHP4的输出缓冲支持允许HTML头信息存放,无论HTML的正文是否输出头信息header,content type,and cookies不采用缓冲25增加了PCRE库PHP
4.0包括一个Perl兼容的正则表达式PCRE库,和正常regex库一起与PHP绑定split和replace PCRE功能被支持PCRE和Perl正规表达式之间有一些细微差别26PHP.ini文件PHP.ini文件在PHP
4.0被重新设计,使用的PHP的配置PHP.ini是更容易并且更有效的全部文件能被Apache在运行时间操作在Apache环境下或由Windows注册表在Windows下面被加入PHP.ini文件的配置指令自动地在所有相关的模块中被支持27引用计数PHP
4.0为系统中的每个数值提供了引用计数,包括资源一旦一个资源不再被任何变量引用,它自动地被释放以节省内存资源利用这个特征的最明显的例子一个内置SQL查询的循环语句在PHP
3.0中,每次递归另外的SQL结果集合重复申请内存,直到脚本执行完毕,这些结果集合占用的内存才被释放28支持引用通过引用可以改变一个变量的值29函数的运行时绑定PHP
4.0的运行时间绑定功能允许你在他们被声明以前调用,无论声明是否在代码以后或是在运行时间30类的运行时信息PHP
4.0支持在运行时刻存取下列类信息一个对象的类名,一个对象的父类的类名字,以及对象函数所在的名字31服务器抽象层为支持Web服务器提供了增强型SAPI服务器API接口,是PHP40不可分的一部分这个服务器抽象层,提供了通用的WEB服务器接口支持,支持多线程WEB服务器,为大多数的WEB服务器提供透明的支持,这些服务器包括Apache,IISISAPI,以及AOL服务器32语法的点亮显示PHP
4.0语法的点亮显示允许开发者看见源代码而不是脚本,这个功能比PHP30中的更有效它跑得更快,更执行得更好,并且产生更紧凑的HTML代码33由引用改变变量的值PHP
4.0由引用支持可变的赋值,关联的2个变量之中个的任何一个的值被改变,另外的变量的值同样被改变,这类似与C中的指针类型34在引用字符串中的变量引用PHP
4.0增强了在引用字符串中的变量引用PHP5PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP
5.0发布该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP DateObjectsPDO现在PHP
5.0版本强化更多的功能首先,完全实现面向对象,提供名为PHP兼容模式的功能其次是XML功能,PHP
5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面同时还强化了XML Web服务支持,而且标准支持SOAP扩展模块数据库方面,PHP新版本提供旨在访问MySOL的新界面--MySQL除此前的界面外,还可以使用面向对象界面和预处理语句Prepared Statement等MySQL的新功能.另外,PHP
5.0上还捆绑有小容量RDBMS-SQLite.
1、新的对象模式New ObjectMode PHP5中的对象已经进行了较系统、较全面的调整,现在的样子可能看起来会有些类似于Java本小节着重讲述PHP5中新的对象模式,并举了一些较简易的例子来说明就让本节成为你的PHP5之旅的一个新起点吧*构造函数和析构函数*对象的引用*对象的克隆*对象中的私有、公共及受保护模式*接口Interfaces*抽象类*__call*__set和__get*静态成员构造函数和析构函数在PHP4中,当函数与对象同名时,这个函数将成为该对象的构造函数,并且在PHP4中没有析构函数的概念在PHP5中,构造函数被统一命名为__construct,并且引入了析构函数的概念,被统一命名为__destruct对象的引用在PHP4中,传递变量给一个函数或方法,实际是把这个变量做了一次复制,也就意味着你传给函数或方法的是这个变量的一个副本,除非你使用了引用符号来声明是要做一个引用,而不是一个Copy在PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作对象的克隆当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎么办呢PHP5提供了一个新的功能,就是对象的克隆,语法为__clone对象中的私有、公共及保护模式PHP4中,一个对象的所有方法和变量都是公共的,这意味着你可以在一个对象的外部操作其中的任意一个变量和方法PHP5引入了三种新的用来控制这种存取权限的模式,它们是公共的Public、受保护的Protected及私有的Private公共模式Public允许在对象外部进行操作控制私有模式Private只允许本对象内的方法对其进行操作控制受保护模式Protected允许本对象及其父对象对其进行操作控制接口Interfaces PHP4中的对象支持继承,要使一个对象成为另一个对象的派生类,你需要使用类似class fooextends parent的代码来控制PHP4和PHP5中,一个对象都仅能继承一次,多重继承是不被支持的不过,在PHP5中产生了一个新的名词接口,接口是一个没有具体处理代码的特殊对象,它仅仅定义了一些方法的名称及参数,此后的对象就可以方便的使用implement关键字把需要的接口整合起来,然后再加入具体的执行代码这对提高代码的可读性及通俗性有很大的帮助,通过上面的例子可以看到,对象foo包含了displayable和printable两个接口,这时我们就可以清楚的知道,对象foo一定会有一个display方法和一个print方法,只需要去了解接口部分,你就可以轻易的操作该对象而不必去关心对象的内部是如何运作的抽象类抽象类不能被实例化抽象类与其它类一样,允许定义变量及方法抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行__call PHP5的对象新增了一个专用方法__call,这个方法用来监视一个对象中的其它方法如果你试着调用一个对象中不存在的方法,__call方法将会被自动调用__set和__get这是一个很棒的方法,__set和__get方法可以用来捕获一个对象中不存在的变量和方法类型指示在PHP5中,你可以在对象的方法中指明其参数必须为另一个对象的实例静态成员静态成员和静态方法在面象对象编程的术语中被称作类方法class methods和类变量class variables类方法在一个对象没有实例化前允许被调用同样,类变量在一个对象没有实例化前可以被独立操作控制不需要用一个对象的方法来控制
2、异常处理Exceptions异常处理是公认的处理程序错误的理想方法,在Java及C中都有这个概念,我们欣喜的看到,在PHP5已经加入了这方面的应用你可以尝试使用try和catch来控制程序的错误当有错误发生的时候,代码会把错误交给catch子句来处理,在catch子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为现在我们可以把所有的错误信息交给一个对象来处理自定义错误处理你可以很方便的用自定义的处理错误的代码来控制你的程序中的意外你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函数和一个getMessage方法
3、名称空间Namespace名称空间对类的分组或函数分组很有用它可以把一些相关的类或函数给组合到一起,方便以后调用例名称空间php namespaceMath{class Complex{//.code.function__construct{printhey;}}}$m=new MathComplex;注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去但接口是要相同的PHP6设想
1.支持Unicode支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的另外一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数
2.Register Globals将被移除这是一个重要的决定,说多新进的PHP开发者会觉得RegisterGlobals满方便的,但是却忽略了RegisterGlobals会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象PHP
4.
3.x版开始时,此项默认设置值即是关闭状态,PHP6正式移除RegisterGlobals也代表着如果程序是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法相信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少
3.Magic Quotes将消失Magic Quotes主要是自动转义需要转义的字符,此项功能移除也符合大多数PHP开发者的心声
4.Safe Mode取消老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到
5.var别名为public在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了
6.通过引用返回将出错现在透过引用返回编译器将会报错例如$a=new b、functionc,OO语言默认就是引用,所以不需要再使用了
7.zend.ze1compatbility mode将被移去Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百分之百能解析PHP4语法,所以旧时代的产物,移除
8.Freetype1and GD1support将不见这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了
9.dl被移到SAPI中dl主要是让设计师加载extension Libs,现在被移到SAPI中
10.Register LongArray去除从PHP5起默认是关闭,再PHP6中正式移除
11.一些Extension的变更例如XMLReader和XMLWriter将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启,eregextension将被放入PECL,代表着它将被移出PHP核心,这也为了让路给新的正则表达式extension,此外,Fileinfoextension也将被导入PHP的核心之中
12.APC将被导入核心这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC
13.告别ASP风格的起始标签原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了其他方面数据库PHP在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件·Adabas D·DBA·dBase·dbm·filePro·Informix·InterBase·mSQL·Microsoft SQLServer·MySQL·Solid·Sybase·ODBC·Oracle8·Oracle·PostgreSQL而在Internet上它也支持了相当多的通讯协议protocol,包括了与电子邮件相关的IMAP,POP3;网管系统SNMP;网络新闻NNTP;帐号共用NIS;全球信息网HTTP及Apache服务器;目录协议LDAP以及其它网络的相关函数除此之外,用PHP写出来的Web后端CGI程序,可以很轻易的移植到不同的操作系统上例如,先以Linux架的网站,在系统负荷过高时,可以快速地将整个系统移到SUN工作站上,不用重新编译CGI程序面对快速发展的Internet,这是长期规划的最好选择变数类型PHP有好多种变数;主要有这些-数字integer-例32-布尔值boolean-例TRUE-字串string-例a stringof text-NULL-资源resource-数组array-例arrayname
[2]-对象object语法语法有三种//comment#comment基本的Control Structures*if.else ifcondition==true;*if.else thenifcondition==true elseifcondition2==true;一个PHP实例html headtitle Firstprogram/title/head bodyphp echohelloworld;/body/html php对面向对象的支持面向对象编程的概念不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面抽象数据类型和信息封装继承多态在PHP中是通过类来完成封装的php classSomething{//在OOP类中,通常第一个字符为大写var$x;function setX$v{//方法开始为小写单词,然后使用大写字母来分隔单词,例如getValueOfArea$this-x=$v;}function getX{return$this-x;}}当然你可以按自己的喜好进行定义,但最好保持一种标准,这样会更有效数据成员在类中使用var声明来定义,在给数据成员赋值之前,它们是没有类型的一个数据成员可以是一个整数,一个数组,一个相关数组associative array或者是一个对象方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用$this-name,否则对一个方法来说,它只能是局部变量使用new操作符来创建一个对象$obj=new Something;然后你可以使用成员函数通过$obj-setX5;$see=$obj-getX;在这个例子中,setX成员函数将5赋值给对象的成员变量x不是类的,然后getX返回它的值5可以象$obj-x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯我强烈建议通过方法来存取成员变量如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的继承在PHP中很容易实现,只要使用extend关键字php classAnother extendsSomething{var$y;function setY$v{$this-y=$v;}function getY{return$this-y;}}Another类的对象现在拥有了父类Something的全部的数据成员及方法,而且还加上了自己的数据成员和方法你可以使用$obj2=new Something;$obj2-setX6;$obj2-setY7;PHP现在还不支持多重继承,所以你不能从两个或两个以上类派生出新的类来你可以在派生类中重定义一个方法,如果我们在Another类中重定义了getX方法,我们就不能使用Something中的getX方法了如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时,它将隐藏基类的数据成员你可以在你的类中定义构造函数构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如php classSomething{var$x;function Something$y{$this-x=$y;}function setX$v{$this-x=$v;}function getX{return$this-x;}}所以你可以创建一个对象,通过$obj=new Something6;构造函数会自动地把6赋值给数据变量x构造函数和方法都是普通的PHP函数,所以你可以使用缺省参数function Something$x=3,$y=5接着$obj=new Something;//x=3and y=5$obj=new Something8;//x=8and y=5$obj=new Something8,9;//x=8and y=9缺省参数使用C++的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中显示调用可以这样做是因为在派生类中所有父类的方法都是可用的php functionAnother{$this-y=5;$this-Something;//显示调用基类构造函数}OOP的一个很好的机制是使用抽象类抽象类是不能实例化,只能提供给派生类一个接口设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能在PHP中没有标准的方法,但是如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上die的调用,这样就可以保证基类是不可实例化的,现在在每一个方法接口后面加上die语句,所以,如果一个程序员在派生类中没有覆盖方法,将引发一个错误而且因为PHP是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份返回某种标识id,并且在你接收到一个对象参数时校验这个值当然,如果一个邪恶不好的程序员在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多发现在懒惰的程序员身上,而不是邪恶的程序员当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了在PHP中没有析构函数重载与覆盖不同在PHP中不支持在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数这要看语言PHP是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象传递不同数量的参数在PHP中实现它的技巧是php classMyclass{function Myclass{$name=Myclass.func_num_args;$this-$name;//注意$this-name一般是错误的,但是在这里$name是一个将被调用方法的名字}function Myclass1$x{code;}function Myclass2$x,$y{code;}}通过在类中的额外的处理,使用这个类对用户是透明的$obj1=new Myclass1;//将调用Myclass1$obj2=new Myclass1,2;//将调用Myclass2有时这个非常好用多态多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法例如,如果你有一个figure的类,它定义了一个draw的方法并且派生了circle和rectangle类,在派生类中你覆盖了draw方法,你可能还有一个函数,它希望使用一个参数x,并且可以调用$x-draw如果你有多态性,调用哪个draw方法就依赖于你传递给这个函数的对象类型多态性在象PHP这样的解释语言想象一下一个C++编译器生成这样的代码,你应该调用哪一个方法你也不知道你拥有的对象是什么类型的,好,这不是重点是非常容易和自然的所以PHP当然支持多态性php functionniceDrawing$x{//假设这是Board类的一个方法$x-draw;}$obj=new Circle3,187;$obj2=new Rectangle4,5;$board-niceDrawing$obj;//将调用Circle的draw方法$board-niceDrawing$obj2;//将调用Rectangle的draw方法用PHP进行面向对象编程一些纯化论者purists可能会说PHP不是一个真正的面向对象的语言,这是事实PHP是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程然而,对于大型项目,你可能想/需要在PHP中使用纯的OOP去声明类,而且在你的项目只用对象和类随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用这些就是软件工程的基础在基于web的项目中应用这些概念就成为将来网站成功的关键高级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 classUniverse{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类可以知道派生类的名字是一个好的经验想象是唯一的限制php echodateY-m-d Hi s;这个语句就是写入当前的时间转载请注明北京丰台清华万博总部特别声明1资料来源于互联网,版权归属原作者2资料内容属于网络意见,与本账号立场无关3如有侵权,请告知,立即删除。