PHP完全自学手册.ppt
第1章 相关知识,欢迎加入PHP的学习行列,希望通过本书的学习,能使读者对PHP有大概的了解,并运行该语言进行网站和软件的开发。PHP作为一种服务器端脚本语言,在开发动态网站,编写网络软件等方面被广泛应用。特别是近几年,PHP的版本不断升级,使PHP语言的处理能力有了很大的提升。这为将来,PHP能处理更多的系统事务奠定了基础。在学习PHP语言之前,先了解相关的术语,以便于以后的学习。,1.1 PHP及相关术语,在阅读技术文档和相关学习资料时遇到专业术语,是学习编程语言时最困难的地方之一,在不了解相关专业术语的前提下,学习成了一件痛苦的事情。为了能顺利的阅读PHP学习资料和技术文档,现列举常用的与PHP有关的专业术语供读者参考。,1.1.1 软件系统相关术语,术语是了解一门语言和语言开发环境的基础,本节就介绍PHP中常碰到的环境术语。(1)软件开发环境(SDE)(2)什么是LAMP、WAMP?(3)什么是Apache?(4)什么是MySQL?(5)Eclipse(6)什么是SSL?(7)什么是模式?(8)什么是框架?(9)什么是MVC?(10)什么是模版?(11)什么是面向过程方法?(12)什么是面向对象方法?(13)什么是Socket?,1.1.2 PHP语言相关术语,PHP不光是一门语言,慢慢扩展成为一种行业,本节介绍这门语言涉及的一些行业用语和技术词汇。(1)什么是PHP?PHP是Hypertext Preprocessor两个英文单词的缩写,是基于服务器端运行的脚本程序语言,其可以实现数据库和网页之间的数据交互。PHP的独特语法混合了C、Java、PERL和PHP式的新语法。PHP语言可以单独运行,也可以镶嵌在HTML文件中,这样程序员就可以不必完全依赖HTML生成网页。因为PHP语言的执行都在服务器端,所以客户端是看不到PHP代码的。(2)什么是PHPer?PHP programmer,指编写PHP的程序员。(3)什么是类?类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象,1.1.2 PHP语言相关术语,(4)什么是对象?对象就是类存在于内存中的实例,通过对类进行实例化,就能得到对应的对象。(5)什么是函数?函数是一段相对独立的代码,不同的语言有不同的定义方式。在PHP中,函数就是有效的PHP代码的集合。在设计复杂程序时,可以把程序分为几个函数,不同的函数完成不同的功能。其优点在于各部分充分独立,不仅可以使程序易读、易维护,还可以对代码进行复用。(6)什么是Session?Session用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于离开这个站点时。PHP使用Session函数来创建和管理会话期内“$_SESSION”中的变量。,1.1.2 PHP语言相关术语,(7)什么是Cookie?Cookie是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。在PHP中可以用 setcookie()函数来设置Cookie。Cookie是HTTP标头的一部分,因此setcookie()函数必须在其他信息被输出到浏览器前调用,这和对header()和SESSION函数的限制类似。可以使用输出缓冲函数来延迟脚本的输出,直到按需要设置好了所有的Cookie或者其他HTTP标头。(8)什么是PEAR?PEAR是PHP的扩展和库代码的知识库,而这个项目最有雄心的目标则是试图定义一种标准,这种标准将帮助开发者编写可移植、可重用的代码。(9)什么是Pecl?Pecl 是通过PEAR打包后,取得的PHP扩展库。,1.1.2 PHP语言相关术语,(10)什么是变量?PHP 中的变量用一个美元符号后面跟变量名来表示,数据存储的内存地址。在PHP中变量名是区分大小写的。(11)什么是常量?常量,即不可变的数值或数据项。常量的值通常是在程序运行前定义的,在整个程序运行的过程中,其值是不会改变得。常量默认为大小写敏感。按照惯例常量标识符总是大写的。(12)什么是引用?在PHP中引用就是用不同的名字访问同一个变量内容。变量名和变量内容是不一样的,因此同样的内容可以有不同的名字。(13)什么是序列化?序列化就是将对象的状态信息转换为可以存储、传输的数据的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。再次使用时,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。序列化只保存了对象的成员数据而不包话方法。,1.1.2 PHP语言相关术语,(14)什么是构造函数?构造函数是类中的一个特殊函数,当使用new操作符创建一个类的实例时,构造函数将会自动调用。在PHP5以前的版本中,当函数与类同名时,这个函数将成为构造函数。PHP5通过定义“_construct”函数来建立构造函数。如果一个类没有构造函数,则调用基类的构造函数,如果有刚调用当前类构造函数。(15)什么是析构函数?PHP5引入了析构函数的概念,通过定义“_destruct”函数来建立析构函数。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。专业术语的记忆有助手对新语言的学习,特别在遇到阅读技术文档时,能理解文档里大量的专业术语,不仅能加快学习的进度,也能更准确的理解原文的意思。可以少走很多弯路。本节介绍的仅限于常用的术语,在PHP语言学习的过程中,应该多注意对PHP专业术语和其他通用专业术语的学习和集累。,1.2 PHP的运行及开发环境,在上一节中,提到了几个术语,即:SDE、LAMP、WAMP和Eclipse。SDE,即软件开发环境,它由软件运行环境和软件开发工具两部分组成。LAMP和WAMP都是软件的运行环境;Eclipse是本书使用到的开发工具。,1.2.1 运行环境,LAMP是指一组常用来搭建动态网站或者网络服务器的软件。这组软件中包括Linux系统、网络服务器APACHE、关系型数据库MySQL和PHP或其他语言插件。LAMP之所以这么倍受推崇,是因为这个组合使用到的软件都是开源软件,而且它们之间的兼容性越来越高。随着开源软件的发展,LAMP已经与J2EE及.NET形成三足鼎立之势。LAMP的自家兄弟WAMP因为微软的Windows系统被广泛使用而名声在外。在Windows系统中,常常使用的网络服务器IIS,也可以用于构建PHP的运行环境。,1.2.2 运行平台的选择,这里指的运行平台就是LAMPWAMP中的L或,即:Linux和Windows操作系统。选择不同的平台会真接影响到软件开发中使用的工具,以及运行环境中其他软件的安装及配置。在大型的网站开发过程中,往往选择LAMP的组合,其优点不仅仅在于是开源软件和兼容性,在稳定性和安全性方面也有很好的表现。但是在平台建设和维护方面的工具量相对也是很多的,这也是其缺点之一。WAMP作为一种可选择的方案,其较短的部署时间,成为新手入门的首先。而且网络上不断推出的免配置版的WAMP更可以让程序员从复杂的环境配置中解脱出来,专心于程序的开发。本书作为PHP入门教材,将选择使用WAMP组合。运行环境的构建将是跨入PHP世界的重要一步。值得庆幸的是走出这一步并不难。免安装、免配置版的WAMP已经发展了很多版本,读者可以很容易的从互联网上取得。下面的三个章节将重点讲解如何在已经拥有Windows系统的电脑上安装Apache、MySQL和PHP。,1.2.3 Apache对客户端与服务器端通信的作用,本书1.1章节的中对Apache进行了名词性的解释,但读者对其在整个开发环境中,能起到的作用还不是很了解。下边列出的是一个简单的客户端与服务器通讯的步骤:(1)客户端(浏览器)和网络服务器建立TCP连接,连接建立以后,向网络服务器发出访问请求(如Get请求)。根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型和请求的URL等一系列信息。(2)网络服务器收到请求后,将客户端要求的页面内容返回到客户端。如果出现错误,那么返回错误代码。(3)断开与远端Web服务器的连接。上面的步骤中提到的网络服务器,就是一台安装有Apache的电脑主机。负责处理客户端请求的数据,并返回客户请求的内容,这就是Apache的作用。,1.2.4 准备工作,从本节开始,学习建立一台实现上述功能的主机。(1)一台已经安装了Windows XP20002003系统的电脑。(关于Windows 的安装过程,请参照其他书籍)。本书使用是Windows XP系统。(2)登录Apache官方网站,下载最新版本的安装程序,本书中使用的是Apache 2.2.6 Released,详细下载地址:。,1.2.5 安装Apache,安装Web服务器是实现通信功能的关键,本节详细介绍如何安装Apache。,1.2.6 确认Apache安装成功,确认Apache安装成功有很多方法,了解和掌握它们,会对网络服务器维护有很大的帮助,下边举例说明常用的两种方法。1使用Apache自带的管理软件2使用浏览器,1.2.7 PHP安装准备,在最初的PHP安装时,都会使用手工配置,但随着PHP的发展,PHP版本也提供了安装版,而且相对于Apache和MySQL的安装来说,PHP的安装简单的多。按照下边的步骤执行,将会为Apache添加PHP的语言支持。下面是安装前的准备工作。(1)登录PHP的官方网站http:/,下载最新版的PHP语言安装文件,本书使用的是,详细下载地址:(2)PHP官方网站提供了适用于不同操作系统的文件,在下载时请注意选择正确的操作系统。(3)PHP分为安装版与非安装版两个版本,请选择需要的包进行下载,本书选择的是安装版。,1.2.8 安装PHP,安装PHP的详细步骤如下所示。,1.2.9 确认PHP安装成功,右击“ApacheMonitor”图标,弹出ApacheMonitor菜单,单击“Open Apache Monitor”菜单项,进入Apache服务管理器,在对话框中单击“Stop”按钮,等待Apache服务关闭后,再单击“Start”按钮启动Apache服务,成功后Apache服务管理器的状态栏会显示:,如图所示。,1.2.10 Apache与PHP的相关配置,为了让Apache支持PHP,PHP的安装配置更改了Apache的配置文件。Apache的主配置文件“httpd.conf”位于Apache的安装目录下的conf文件夹内,如图所示。使用记事本程序打开“httpd.conf”,拖动滚动条至文件下方,会看到配置文件最下方有4行关于PHP的配置代码,如图所示。,1.2.11 开发工具,开发工具是程序员使用最多的软件,它的选择与程序员的编程习惯和软件开发环境有关。最初的PHP是没有专门的开发工具的,但随着PHP的商业化运作和开源软件的发展,很多流行的IDE都添加了对PHP编码的支持,其中有Adobe公司的Dreamweaver和大名鼎鼎的Eclipse。说到PHP的开发工具,就不能不提到Zend Studio,它是目前公认的最强大的PHP开发工具,这种集成软件包括了用于编辑,调试,配置PHP程序所需要的客户及服务器组件,具有工业标准的PHP开发环境,代码完成引擎和功能齐全的调试器。EditPlus及其他流行的文本编辑工具都可以作为PHP的开发工具,但是在开发稍大一点的软件系统时,这些工具就会受到很多限制。但是体积小,运行快的这个特点在调试程序时,还是很实用的。如果只是想更改程序的一条代码,就要启动功能齐全的IDE,显然不合适,此时这类文本编辑软件就排上用场了。,1.2.12 Eclipse的下载、安装及配置,在上边的章节中,讲述了PHP相关的开发工具,在综合了各种因素后,本书选择Eclipse作为主要开发工具。下边介绍Eclipse的安装与配置。Eclipse的版本与插件版本之间的对应是有要求的,如果不兼容的版本之间对应,插件有可能不会启动。为了解决这个问题,Eclipse官方网站提供了语言开发环境的打包下载,即把Eclipse和语言开发插件打包在一起,省去复杂的配置过程。,1.3 第一个PHP程序,在一切准备工作就绪后,就可以使用Eclipse编写PHP程序,并在Apache里发布并运行了。编写代码、发布、运行这一过程很简单,通过本节的学习,很快就会掌握。,1.3.1 使用Eclipse编写源程序,编程语言的学习,不仅仅是对语言本身的熟悉,同时要对其周边的知识,如:开发工具、调试工具、运行环境配置等各个方面都进行了解,打下坚实的基础,才能更灵活、高效的运用这种语言工具。通过对上面几个小节的学习,了解了PHP运行需要的环境和配置方法。在接下来的章节中,会详细介绍PHP的语法,函数,数据库等知识。在开始学习这些知识以前,先了解怎么样使用Eclipse新建PHP项目及编写PHP程序。,1.3.2 发布和运行PHP程序,所谓的发布PHP程序,就是把已经编写完成的PHP代码文件复制到Apache指定的文档根目录下。Apache默认的文档根目录,就是其安装目录下的htdocs文件夹。为了方便读者发布程序,在运行Eclipse时,选择的工作空间就是这个文件夹。在章节中,Eclipse中新建的项目“learn”,等同的操作就是在htdocs文件夹下新建一个名为“learn”的文件夹。而新建文件hello.php,就是在learn文件夹下新建一个名为hello.php的PHP代码文件。这两个动作其实就是PHP程序的发布过程,动作完成后,hello.php已经发布到了Apache的文档根目录里的learn文件夹下。接下来,就是运行这个PHP文件。运行PHP有三种方式:在命令行中运行,作为桌面程序运行,作为服务器端脚本运行。其中最经常使用的就是作为服务器端脚本运行方式。,1.4 常见问题,第一章的内容主要是介绍了计算机与PHP语言的相关术语,PHP的运行环境的安装与配置及PHP开发工具的安装与简单使用。在本章的几个知识点里,有几个问题应该特别说明一下。,1.4.1 Apache安装常见问题,Apache为电脑提供网络服务,会以系统服务的形式存在,默认占用的80端口。如果在安装Apache以前,Windows安装了自带网络服务程序,即IIS或其他软件占用了80端口,Apache在安装完成后,网络服务是不会启动的。在遇到这种情况,有两种解决方法。方法一:停止占用端口的软件如果程序员的机器要运行ASP程序,很有可能安装了IIS,而同时又使用Apache布属PHP程序,那么后来安装的Apache是不能正常运行的。这种情况下可以通过停止IIS服务或改变IIS的服务端口来解决问题。方法二:改变Apache的默认端口为了不影响现有的程序运行,可能通过改变Apache的默认端口来解决问题。,1.4.2 MySQL安装常见问题,MySQL安装时也会遇到端口冲突的问题,在默认端口3306被占用时,可以在安装里尝试使用其他端口进行安装,具体步骤参见小节的第15步。,1.4.3 PHP安装常见的问题,为了减少PHP安装过程中的错误,本书使用安装程序进行安装。在某些情况下,不能使用安装程序安装时,手动安装最容易出现的错误在路径问题上。由于手动安装,PHP运行需要的某些文件在PHP配置文件中找不到路径,就会引发错误。此类错误的解决方法,可以通过查找、修改PHP配置文件中关于路径的设置来解决。在开始正式学习PHP语言之前,要对PHP配置文件中“register_globals”参数进行设置。其作用是:在设置为“on”时,程序中的变量将自动注册为全局变量,在设置为“off”是关闭这项功能。“register_globals”设置为“on”,是PHP程序中一个主要的安全隐患。要更改这项参数的设置,需要对PHP的配置文件进行编辑。,1.4.4 关于Eclipse的问题,为了省去复杂的中文化过程,本书使用的是英文版的Eclipse,在整个使用过程中,只是涉及了几个简单而且常用的英文单词,相对于整个PHP语言的学习来说,没有什么大的障碍。如果读者希望使用中文版的Eclipse,可以下载系列版本的Eclipse和相应版本的PDT进行配置。Eclipse的更新很快,为了节省读者的时间,光盘中提供了Eclipse的压缩包,通过解压缩可以直接使用Eclipse程序。在实际应用中,运行环境和开发工具的使用都会产生很大小的问题,在这里就不一一列举。如果读者有什么疑问,可能通过论坛进行交流。,第2章 语法,在第1章的学习中,介绍了PHP运行平台的选择、安装与配置。同时介绍了相关的PHP开发工具及其特点。通过学习这些知识,为PHP语言的学习打下了坚实的基础。在下面章节的学习中,统一使用第一章中构建的PHP运行环境,以及开发工具来编写PHP文件。每一项语言学习的第一步都是语法,可见其在语言学习中地位的重要性。语法的学习过程其实就是规则的学习过程。在熟练的掌握了要学习语言的规则后,才可以灵活的使用语言。PHP的语法相对其他编程语言来说,还是相对简单的。在通过与流行编程语言的比较后,会发现大多数编程语言的语法都大同小异。这对有语言学习基础的读者来说,可以很快进入学习,同时也要注意区别细节部分,以防止错误代码的产生。,2.1 语法基础,每一种编程语言都有其特点,PHP对于初学者来说,入门很简单,但是同时也会为专业的程序员提供高级特性。但无论简单或高级编程,都是以语法为基础的。本章节的学习重点就是语法。,2.1.1 使用PHP输出HTML,通过前面章节的学习,了解了怎么样编写PHP程序,并使之运行的过程。本文提到的PHP文件是以“.php”为扩展名的文件。PHP代码作为服务器脚本在后台运行,运行后得出的数据,通过PHP语言自带的显示函数,输出到浏览器内。在PHP输出HTML可以使用echo()或print()来实现,代码如下所示。,2.1.2 使用显示函数输出HTML,使用显示函数输出带有HTML格式的内容,代码如清单所示。清单 显示函数输出带有HTML格式的内容 输出带有HTML格式的测试字符串;$str3=输出带有HTML格式的测试字符串;echo$str1;echo;echo$str2;print;print$str3;?,2.1.3 使用开始符、结束符嵌套HTML,使用开始符、结束符输出HTML,演示代码如下所示。测试的变量值等于1。测试的变量值不等于1。这种方法插入HTML比较简单,不用顾虑单引号和双引号嵌套的问题。其优点在于,不容易产生错误,适用于在PHP里插入大段的HTML代码,特别适用于过程编程方法。但是后期的代码维护有一定的难度。特别是当HTML语句过长时,在编写程序的逻辑代码时容易产生错误。,2.1.4 使用定界符显示HTML,使用定界符输出HTML,演示代码如清单所示。清单 使用定界符输出HTML的方法测试字符串测试字符串测试字符串EOD;echo$str;/为定界符定义使用的变量$name=爱因斯坦;$dicta=想象力比知识更重要,因为知识是有限的,而想象力概括着世界上的一切,推动着进步,并且是知识进化的源泉。;$size=5;echo$name说:“$dicta”EOT;?,2.1.5 把PHP嵌入HTML,在HTML里嵌入PHP代码相对来说比较简单,代码如清单所示。清单 把PHP嵌入HTML用户交互页面本页是PHP代码测试页,这一行是使用HTML代码直接输出.,2.1.6 PHP与JavaScript的交互,JavaScript并不是新推出的脚本语言,但随着AJAX技术的兴起,这种在客户端运行,不浪费服务器端的资源,能建立良好的用户交互界面的脚本,得到了广泛的应用。与此同时网络编程语言与JavaScript变量的交换,也成了讨论的焦点。PHP与JavaScript的交互大体可分为3种,即:使用PHP生成JavaScript,使用COOKIE进行数据交换,使用临时文件进行数据交换。PHP生成JavaScript的方法,可以动态生成JavaScript,使得在服务器端的设置,通过客户端的JavaScript表现出来,提升用户体验。在使用时应注意,PHP生成JavaScript脚本的语法,不用与JavaScript语法混合。使用COOKIE进行数据交换,可以在PHP与JavaScript脚本交换小数据量时使用。因为COOKIE与脚本代码无关,PHP与JavaScript都可以设置和读取COOKIE,使得两种语言在交换数据里,变得很简单。使用临时文件进行数据交换,原理与使用COOKIE进行数据交换是一样的,只不过临时文件可以存取的数据量更大,样式更丰富。但使用临时文件往往需要更多的操作代码。,2.1.7 使用PHP生成JavaScript,使用PHP生成JavaScript的方法很简单,与PHP输出HTML使用同样的方法,在两种语言嵌套时,应注意不要把语法混合,演示代码如清单所示。清单 使用PHP生成JavaScript;echo var jsVar=我是JavaScript变量;echo var phpVar=这是.$var2.与JavaScript组成的变量;echo alert(jsVar);echo alert(.$var1.);echo alert(phpVar);echo;?,2.1.8 在PHP与JavaScript中使用COOKIE传递变量,PHP与JavaScript都能访问浏览器里的COOKIE,通过PHP与JavaScript的COOKIE函数,可以轻松的进行交互,演示代码如清单所示。(详细内容请对照本书)上面的代码演示了怎么样使PHP与JavaScript通过COOKIE进行数据交换。因为PHP在设置COOKIE时,会使用urlEncode对COOKIE的值进行编码,而JavaScript在解析这种编码方面还很困难,或者说是不可能。所以采用了“VBScript”脚本编写的编码解析函数来解决这个问题。使用COOKIE交互数据,在PHP与JavaScript交换少量数据时比较常用到。,2.1.9 使用临时文件进行数据交换,这种方法和使用COOKIE进行数据交换方法的原理着不多。只不过,使用临时文件可以交换更大的数据量,可选择性比较强。PHP的文件操作函数,在权限允许的情况下,可以在服务器端创建、存储和读取文件。用于数据交换的文件也有比较多的格式选择,例如通用的XML格式、JSON格式或使用自定义的格式。下面通过一段代码,简单演示PHP与JavaScript,使用XML文件进行数据交互的例子,演示代码如清单所示。,2.1.10 使用注释,在本章的示例代码中,为了方便读者阅读代码,使用了大量的注释语句。大型的软件系统开发时,代码往往是成千上万行,在这么多的代码中,快速的阅读代码,并找到想要的内容,这就是注释最重要的作用。PHP注释分为单行注释和多行注释,下面的代码段,显示的是几种正确的注释方法。,2.2 类型,本节提到的类型是指变量的类型。不同类型的变量存储的值的大小和形式都不一样。而变量的类型通常不是由程序员设定的,是由PHP根据该变量使用的上下文在运行时决定的。PHP 支持8种原始类型。4种标量类型:boolean(布尔型)、integer(整型)、float(浮点型,也作“double”)、string(字符串);两种复合类型:array(数组)、object(对象);两种特殊类型:resource(资源)、NULL。,2.2.1 布尔型,布尔型的英文名称为:boolean。布尔型是最简单的变量类型。其取值只有两个:真和假,使用TRUE和FALSE表示。要想为变量指定一个布尔值,只需要为其指定关键字“TRUE”或“FALSE”,并且这两个关键字不分大小写。布尔型变量多用于流程控制,示例代码如下所示。;/使用布尔值进行逻辑控制if($flag=TRUE)echo 旗帜已经升起。;elseecho“旗帜还没有升起。”;/单独使用布尔值进行逻辑控制if($run)echo 运行员已经起跑。;?,2.2.2 布尔型的类型转换,在很多情况下,程序计算的结果会用来做逻辑运算,这时就需要把不是布尔值的变量转换成布尔值。强制转化布尔值,可以在变量前使用“(bool)”或“(boolean)”来实现。但是很多情况下不需要用强制转换,因为当运算符、函数或者流程控制需要一个布尔型的参数时,该值会被自动转换,这也是PHP语法的一个特色。但如果遇到强制转换布尔值时,还是需要仔细检查,以防程序出现错误。当转换为布尔值时,以下值被认为是 FALSE:整型值:0(零)。浮点型值:0.0(零)。空白字符串和字符串:“0”。没有成员变量的数组。特殊类型NULL(包括尚未设定的变量)。所有其他值都被认为是TRUE(包括任何资源)。,2.2.3 整型,整型的英文名称为:integer。整型变量的值,使用集合表示就是Z=.,-2,-1,0,1,2,.。也就是正整数、0与负整数中的任意一个数。整型值可以用十进制,十六进制或八进制符号指定,前面可以加上可选的符号“-”或者“+”,如果用八进制符号,数字前必须加上0(零),用十六进制符号数字前必须加上0 x。下面演示部分整数使用整型来进行文字表达的方法,代码如下所示。,2.2.4 整型的类型转换,在有些情况下,需要对整型数值进行强制类型转换,或者根据上下文自动转换。为了保证程序的正常运行,需要对转换后的类型加以确认。下面介绍的是两种整型自动转换的例子。(1)当整型变量溢出时,变量类型会自动转换成 float也就是浮点型。如果给定的一个数或执行运算得出的结果,超出了整型的范围,就称为溢出。在出现溢出后,PHP会自动转换类型来保证数据的正确。下面演示的是分别使用十进制、十六进制表达整型变量正常及溢出的情况,,2.2.5 浮点型,浮点型的英文名称为:float。中文名称也可以称为浮点数、双精度数或实数,可以用以下语法定义,定义代码如下所示。浮点数的字长和平台相关,通常最大值是1.8e308并具有14位十进制数字的精度。关于浮点数精度,要特别注意,在小节中,将运行结果还没有确定的表达式转换为整型时,出现了精度的问题。简单的十进制分数如0.1或0.7,不可能在不丢失精度的情况下转换为内部二进制的格式,这就会造成输出结果的失真,如floor(0.1+0.7)*10)通常会返回7而不是8。虽然浮点数能表达的值比整型多,但也有其限制,如1除3后会产生无限小数,就不可能使用浮点数表示了。所以不要相信浮点数结果精确到了最后一位,也不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者gmp函数。,2.2.6 浮点型的类型转换,浮点型的类型转换比较简单,字符串型转换为浮点的方法,会在小节中介绍。而其他类型的值转换为浮点型时,应先将值转换成整型,然后再转换成浮点。,2.2.7 字符串,字符串的英文为:string。其值是一系列字符。其范围在PHP中没有强制限制,所以在操作字符串时,不用担心其长度过长的问题。在上面的章节中,已经接触过字符的定义方法,总结一下,共分为3种:单引号、双引号和定界符。(1)单引号:定义字符串的最简单的方法是把字符用单引号()括起来。如果在定义的字符串中出现单引号,就需要使用转义操作符()进行转义后,才能正常输出。使用单引号定义的字符串中出现的变量和转义序列不会被变量的值替代。(2)双引号:使用双引号()括起字符,同样可以定义字符串。与单引号定义字符串相同,如果在定义的字符串中出现了一个双引号,就需要使用转义操作符进行转义。而在字符串中出现其他的特殊字符,可以对照表2-1进行转义操作。(3)定界符:使用定界符定义字符串,在前边的章节已经使用过。,2.2.8 字符串与双引号,在使用单引号和双引号定义字符串时,在使用的时候会有不同的表现,下面演示的是单引号与双引号定义字符串的方法和转义字符串的使用,代码如清单所示。,2.2.9 字符串与定界符,定界符由开始标识符和结束标识符组成。开始标识符由“,2.2.10 简单语法与复杂语法,简单语法比较通用和方便,其不仅能解析变量,还可以解析数组索引或者对象属性。对于数组索引,右方括号()标志着索引的结束。对象属性和方法和简单变量使用方法相同。定界符中,在输入法为半角英文状态下输入的代码中插入变量,可以使用简单语法。对于比较复杂的情况,可以使用复杂语法。复杂语法可以用花括号括起一个表达式。不是因为语法复杂而称其为复杂,而是因为用此方法可以包含复杂的表达式。复杂语法可以在字符串中包含任何值,包括表达式。在一个字符串中出现中文,那么可以使用复杂语法在字符串中添加变量,演示代码如小节中的清单所示。因为这种方法很少使用,在此就不多做介绍。注意:这两种方法只适用于双引号或者定界符指定的字符串。,2.2.11 字符串型的类型转换,可以用(string)标记或者strval()函数将一个值转换为字符串。当使用echo()或者print()函数时,或者将一个变量值与一个字符串进行比较的时候,字符串的转换会在表达式范围内自动完成。在类型自动转换和强制转换时,一定要注意转换后变量的值。下面演示的是,在强制转换各个类型为字符串时,产生的值的情况,代码如下所示。,2.2.12 数组,数组是一组具有相同数据类型元素组成的一个有序图。PHP中的图是一种把 values(值)映射到 keys(键名)的类型。数组通过使用array()函数定义,其值使用“key=value”的方式设置,多个值通过逗号分割。数组的定义,如以下代码所示。banana,red=flower,3=三,03=叁);/直接为数组赋值$two=array(1,2,3,4,5,6,7,8,9);/带有一个键名的数组$three=array(6=六,七,八,九,十);?,2.2.13 简单的数组操作,数组的简单操作包括显示、添加、修改和删除,演示代码如下所示。,2.2.14 遍历数组,遍历数组,就是把数组中的值,通过某种方法一一展现。数组的应用,大多都要求对数组进行遍历。遍历数组的方法很多,在本书的2.8节中会有其他方法的介绍,本小节只介绍使用foreach()函数遍历数组的方法,代码如清单2.12所示。清单2.12 遍历数组$value)echo 值$value的键名是$key;/使用foreach遍历数组,只取值foreach($colors as$value)echo 没有键名,只有值:$value;?,2.2.15 数组的类型转换,要把其他类型转换为数组,可以使用(array)标记,各个类型在转换后的数组会有所差别,代码如清单所示。,2.2.16 多维数组,多维数组与数组的定义、操作方法都相同。通过演示代码,可以了解多维数组的定义和操作过程,代码如下所示。array(1,2,3,4,5,6,7),colors=array(红,蓝,绿,黄,紫,青,橙);/遍历一个多维数组foreach($more as$arrays)foreach($arrays as$key=$value)echo$value;/显示多维数组的值echo$morenumbers5;echo$morecolors5;/删除多维数组的值unset($morenumbers0);?,2.2.17 对象,在PHP中,要使用“new”把对象实例化到一个变量中,代码如下所示。height=170;/初始化对象$newHuman=new human();/访问对象属性echo$newHuman-height;/访问对象的方法$newHuman-setHeight();echo$newHuman-height;?对象是通过实例化后的变量来操作的,关于对象与类的更多操作,可以参见本书的第3章。,2.2.18 对象的类型转换,其他类型转换为对象,可以使用(object)操作符实现,代码如清单所示。清单 其他类型转换为对象,2.2.19 资源,资源是一种特殊变量,其值是一个到外部资源的引用。通过专门的函数,可以建立资源并对其进行访问,能建立资源的函数很多,在本书的其他章节有所介绍,本小节使用fopen()函数来建立一个资源,代码如下所示。,2.2.20 NULL,NULL是一个特殊的值,在给变量赋与此值时,代表该变量没有值。此类型唯一的,也是仅有的值就是NULL。可以通过is_null()函数来判断当前变量,是否为NULL值,代码如下所示。,2.2.21 变量类型之间的转换,关于类型的转换,在讲解类型的时候,已经进行了介绍。在PHP中的变量,会根据上下文的判断,自动设置变量的类型。强制转换类型也可以使用以下操作符实现。(int)、(integer):转换成整型;(bool)、(boolean):转换成布尔型;(float)、(double)、(real):转换成浮点型;(string):转换成字符串;(array):转换成数组;(object):转换成对象;注意:强制转换操作符的括号内允许有空格和制表符的出现。,2.3 变量,程序运行时,会在内存中存储两种形态的信息。经过定义,在程序运行中不再改变的值,称为常量;而根据各种条件,会发生变化的值称为变量。PHP中的变量由“$”符号和变量名来表示。其引用的就是存储该变量的内存地址。,2.3.1 命名规则,变量的命名与PHP其他标签遵守相同的规则,正确的变量名由“$”符号,后面跟随以字母或下划线开头的,任意数量的字母、数字、下划线。其中字母的范围是小写字母a-z和大写字母A-Z,使用ASCII码表示就是从127-255;下划线是指“_”;数字是从0-9取值。通过下面的演示,说明一下变量的命名规则,代码如下所示。,2.3.2 变量类型,变量的基本类型有布尔型、整型、浮点型、字符串、数组五种,加上扩展的对象、资源、NULL3种,一共有8种变量类型可供选择。PHP的变量类型,会根据程序运行的上下文自动改变。有例外的情况,也在上一节中进行了介绍。要特别注意的是,有些类型是不能强制转换的,例如:资源。变量在使用前一般都经过初始化,但是没有经过初始化的变量,在参与表达式的运算时,一定要注意其值的变化,下面代码演示的是,各类型变量没有初始化参与运算时的值的情况,,2.3.3 变量范围,一个变量初始化后,其作用范围就确定下来了。下面演示的是变量定义后的有效范围,代码如清单所示。清单 在包含文件中定义变量,2.3.4 全局与超全局变量,要想在函数内部访问外部变量,可以使用“global”关键字或访问超全局变量来实现,代码如清单所示。,2.3.5 静态变量,静态变量属于变量的一种。变量在程序执行时,离开其作用域,其值将会改变或消失。而静态变量恰恰相反,在程序执行时,离开其作用域时,其值不会丢失。通过以下代码,可以更清楚的了解这个过程,代码如清单所示。,2.3.6 可变变量,在不确定一个变量的名称时,可以使用可变变量,通过演示代码,可以了解可变变量的设置和使用方法,代码如清单所示。清单 可变变量演示,2.3.7 外部变量,在程序中定义或自动产生的变量称为内部变量。由HTML表单、URL或外部程序产生的变量称为外部变量。可以通过预定义变量“$_REQUEST”、“$_POST”、“$_GET”获取外部变量,代码如清单所示。,2.4 预定义变量,预定义变量是由PHP预设的一组数组,其数据包括运行环境、用户输入数据等。因其作用范围是全局生效,所以又称为超全局变量或自动全局变量。,2.4.1 服务器变量:$_SERVER,服务器变量是由网络服务器创建的数组,其内容包括头信息、路径、脚本位置等。不同的网络服务器提供的信息有所出入,本书以Apache服务器提供的作为标准。,2.4.2 环境变量:$_ENV,环境变量是预定义的一个数组,记录着系统路径等信息。使用print_r()函数,可以查看具体的环境变量的数组成员。其数组成员主要包括:ALLUSERSPROFILE,BID,CommonProgramFiles,COMPUTERNAME,ComSpec,FP_NO_HOST_CHECK,NUM