PHP(外文名:PHP: Hypertext Preprocessor,中文名“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的程式语言相比,PHP是将程式嵌入到HTML(标準通用标记语言下的一个套用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和最佳化代码运行,使代码运行更快。
基本介绍
- 中文名超文本预处理器
- 外文名PHP: Hypertext Preprocessor
- 编程范型面向对象、命令式编程
- 设计者Rasmus Lerdorf
- 维护The PHP Group
- 最新版本PHP 5.6.0(28 Aug 2014)
- 作业系统windows/linux/Mac跨平台
- 外语缩写PHP
发展
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而製作的一个简单的用Perl语言编写的程式。这些工具程式用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。后来又用C语言重新编写,包括可以访问资料库。他将这些程式和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和资料库连线,产生简单的动态网页程式。
在1995年以Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本,Lerdorf写了一些介绍此程式的文档。并且发布了PHP1.0!在这的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了PHP,并且强烈要求增加一些特性。比如循环语句和数组变数等等;在新的成员加入开发行列之后,Rasmus Lerdorf 在1995年6月8日将 PHP/FI 公开发布,希望可以透过社群来加速程式开发与寻找错误。这个发布的版本命名为 PHP 2,已经有 PHP 的一些雏型,像是类似 Perl的变数命名方式、表单处理功能、以及嵌入到 HTML 中执行的能力。程式语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。PHP/FI加入了对MySQL的支持,从此建立了PHP在动态网页开发上的地位。到了1996年底,有15000个网站使用 PHP/FI。
在1997年,任职于 Technion IIT公司的两个以色列程式设计师Zeev Suraski 和 Andi Gutmans,重写了 PHP 的剖析器,成为 PHP 3 的基础。而 PHP 也在这个时候改称为PHPHypertext Preprocessor。经过几个月测试,开发团队在1997年11月发布了 PHP/FI 2。随后就开始 PHP 3 的开放测试,在1998年6月正式发布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 发布后开始改写PHP 的核心,这个在1999年发布的剖析器称为 Zend Engine,他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。
在2000年5月22日,以Zend Engine 1.0为基础的PHP 4正式发布,2004年7月13日则发布了PHP 5,PHP 5则使用了第二代的Zend Engine。PHP包含了许多新特色,像是强化的面向对象功能、引入PDO(PHP Data Objects,一个存取资料库的延伸函式馆)、以及许多效能上的增强。PHP 4已经不会继续更新,以鼓励用户转移到PHP 5。
2008年PHP 5成为了PHP唯一的有在开发的PHP版本。将来的PHP 5.3将会加入Late static binding和一些其他的功能强化。PHP 6 的开发也正在进行中,主要的改进有移除register_globals、magic quotes 和 Safe mode的功能。
PHP最新稳定版本5.4.30(2013.6.26)
PHP最新发布的正式版本5.5.14(2014.6.24)
PHP最新测试版本5.6.0 RC2(2014.6.03)
2013年6月20日,PHP开发团队自豪地宣布推出PHP 5.5.0。此版本包含了大量的新功能和bug修复。需要开发者特别注意的一点是不再支持 Windows XP 和 2003 系统。
2014年10月16日,PHP开发团队宣布PHP 5.6.2可用。四安全相关的错误是固定在这个版本,包括修复cve-2014-3668,cve-2014-3669和cve-2014-3670。所有的PHP 5.6鼓励用户升级到这个版本。
开发工具
集成开发环境是一种集成了软体开发过程中所需主要工具的集成开发环境,其功能包括但不仅限于代码高亮、代码补全、调试、构建、版本控制等。一些常见的PHP IDEs如下
- Zend Studio商业版,Zend官方出品,基于eclipse
- Eclipse with PDT免费
- Coda商业版,针对Mac用户
- NetBeans免费,功能强大
- PHP Storm商业版
- Aptana Studio免费
- PhpEd商业版
- Komodo IDE/EditIDE为商业版,Edit可免费使用
- Adobe Dreamweaver商业版
除去集成开发环境,具备代码高亮功能的常见文本编辑器因其轻巧灵活也常被选作开发工具,例如Notepad++、Editplus、SublimeText、Everedit(国人开发)等等。
特性
PHP的特性包括
1. PHP 独特的语法混合了 C、Java、Perl 以及 PHP 自创新的语法。
2. PHP可以比CGI或者Perl更快速的执行动态网页——动态页面方面,与其他的程式语言相比,
PHP是将程式嵌入到HTML文档中去执行,执行效率比完全生成htmL标记的CGI要高许多;
PHP具有非常强大的功能,所有的CGI的功能PHP都能实现。
3. PHP支持几乎所有流行的资料库以及作业系统。
4. 最重要的是PHP可以用C、C++进行程式的扩展!
优势
开放原始码
所有的PHP原始码事实上都可以得到。
免费性
和其它技术相比,PHP本身免费且是开原始码。
快捷性
程式开发快,运行快,技术本身学习快。嵌入于HTML因为PHP可以被嵌入于HTML语言,它相对于其他语言。编辑简单,实用性强,更适合初学者。
跨平台性强
由于PHP是运行在伺服器端的脚本,可以运行在UNIX、LINUX、WINDOWS、Mac OS、Android等平台
效率高
PHP消耗相当少的系统资源。
图像处理
用PHP动态创建图像,PHP图像处理默认使用GD2。且也可以配置为使用image magick进行图像处理。
面向对象
在php4,php5 中,面向对象方面都有了很大的改进,php完全可以用来开发大型商业程式。
专业专注
PHP支持脚本语言为主,同为类C语言。
技术套用
- 伪静态
- 静态页面生成
- 资料库快取
- 过程快取
- div+cssw3c标準
- 大负荷
- 分散式
- flex
- 桌面程式套用(不擅长)
- 支持MVC模型
- Smarty模版引擎
参考手册
函式完整参考手册
序号 | 分类 | 描述 |
---|---|---|
1 | Array 函式 | |
2 | Calendar 函式 | 日曆扩展包含了简化不同日曆格式间的转换的函式。 |
3 | Date/Time 函式 | Date/Time 函式用于从 PHP 脚本运行的伺服器上获取日期和时间并进行格式化。 |
4 | Directory 函式 | Directory 函式用于获得关于目录及其内容的信息。 |
5 | Error/Logging 函式 | Error/Logging 函式用于对错误进行处理和记录。 |
6 | Filesystem 函式 | Filesystem 函式用于访问和操作档案系统。 |
7 | Filter 函式 | PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。 |
8 | FTP 函式 | FTP 函式通过档案传输协定 (FTP) 提供对档案伺服器的客户端访问。 |
9 | HTTP 函式 | HTTP 函式用于对由 Web 伺服器传送到浏览器的信息进行操作。 |
10 | Libxml 函式 | Libxml 函式和常量与 SimpleXML、XSLT 以及 DOM 函式一起使用。 |
11 | Mail 函式 | mail() 函式用于从脚本中直接传送电子邮件。 |
12 | Math 函式 | Math 函式能处理 integer 和 float 範围内的值。 |
13 | 杂项函式 | 我们把不属于其他类别的函式归纳到杂项函式类别。 |
14 | MySQLi 函式 | MySQLi 函式用于访问 MySQL 资料库伺服器。 |
15 | SimpleXML 函式 | SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。 |
16 | String 函式 | |
17 | XML Parser 函式 | XML Parser 函式允许您创建 XML 解析器,并为 XML 事件定义句柄。 |
18 | Zip File 函式 | Zip File 函式允许您读取压缩档案。 |
版本区别
PHP版本VC6与VC9、Thread Safe与None-Thread Safe等的区别
PHP的大版本主要分三支PHP4/PHP5/PHP6
其中,PHP4由于太古老、对QQ支持不力已基本被淘汰,请无视PHP4。
PHP6由于基本没有生产线上的套用,还基本只是一款概念产品,很多功能已在PHP5.3.3上实现,所以也不详述,请无视PHP6。
PHP5的版本主要分四支PHP5.2之前的版本、PHP5.2.X、PHP5.3和日前发布的PHP5.4。
选择版本
PHP5.2之前的版本不值得考虑,因为某些功能缺陷或者BUG。PHP5.4还处于Beta试用的版本号,非稳定版本,请无视PHP5.4。
主流PHP程式对PHP5.2.X的兼容性最好,而每次版本号的升级带来的都是安全性和稳定性的改善,所以宜挑选最新的版本。目前PHP5.2系列最新的是PHP5.2.17。
而如果产品是自己开发自己使用,PHP5.3在某些方面更具优势,在稳定性上更胜一筹,增加了很多PHP5.2所不具有的功能,比如内置php-fpm、更完善的垃圾回收算法、命名空间的引入、sqlite3的支持等等,是部署项目值得考虑的版本,强烈推荐PHP5.3.3。
除了版本号的不同,同一版本号的PHP版本也有区别,并且在选择PHP扩展的时候需要注意。
- install版可执行的MSI格式安装包。
- ZIP版解压即可用。和install版无区别。建议选择ZIP版。
- DEBUG版最终用户无需关心。
VC6与VC9
如果你在apache1或者apache2下使用PHP,你应该选择VC6的版本
如果你在IIS下使用PHP应该选择VC9的版本,VC6的版本使用visual studio6编译,VC9使用Visual Studio 2008编译,并且改进了性能和稳定性。VC9版本的PHP需要你安装Microsoft 2008 C++ Runtime。不要在apache下使用VC9的版本。
TS和NTS
TS指Thread Safety,即执行绪安全,一般在IIS以ISAPI方式载入的时候选择这个版本。
NTS即None-Thread Safe,一般以fast cgi方式运行的时候选择这个版本,具有更好的性能。
从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是执行绪安全的版本,这是由于与Linux/Unix系统是採用多进程的工作方式不同的是Windows系统是採用多执行绪的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程的基础之上的,而非多执行绪。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多执行绪的方式,这样就快多了。但存在一个问题,很多常用的PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。在IIS下CGI模式才是 PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新载入和卸载整个PHP环境,其消耗是巨大的。
为了兼顾IIS下PHP的效率和安全,微软给出了FastCGI的解决方案。FastCGI可以让PHP的进程重複利用而不是每一个新的请求就重开一个进程。FastCGI也可以允许几个进程执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存线上程安全问题的优势。
,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(执行绪安全)的版本;而用FastCGI模式运行PHP的话就没有必要用执行绪安全检查了,用None Thread Safe(NTS,非执行绪安全)的版本能够更好的提高效率。
查看版本
一个很简单的办法就是phpinfo();
Thread Safety disabled是NTS,enabled是TS
Configure Command看到VC98字样的是VC6,Compiler标明 MSVC9 (Visual C++ 2008) 的是VC9
在WIN7下IIS7+NTS+FastCGI+vc9 是最佳搭档或者apache+fastcgi+nts+vc6。
在WINXP下Apache+TS+Apache module +vc6最合适的搭档。
PHP3
PHP3跟Apache伺服器的紧密结合的特性;加上它可以不断的更新及加入新的功能,而且几乎支持所有主流与非主流资料库。再以它能高速的执行效率,使得PHP在1999年中的使用站点已经超过了150000。加上它的原始码完全公开,在 Open Source意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函式库加入,以及不停地更新的活力。使得PHP无论在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供丰富的函式,使得在程式设计方面有着更好的支持。
PHP4
简介
PHP4.0整个脚本程式的核心大幅更动,让程式的执行速度,满足更快的要求。在最佳化之后的效率,已较传统CGI或者ASP等程式有更好的表现。而且还有更强的新功能、更丰富的函式馆。无论您接不接受,PHP 都将在 Web CGI 的领域上,掀起巅覆性的革命。对于一位专业的Web Master 而言,它将也是必修课程之一。
PHP 4.0是更有效的,更可靠的动态Web页开发工具,在大多数情况运行比 PHP 3.0要快,其脚本描述更强大并且更複杂,最显着的特徵是速率比的增加。PHP4.0这些优异的性能是PHP脚本引擎重新设计产生的结果引擎由AndiGutmans和Zeev Suraski从底层全面重写。PHP4.0 脚本引擎 ——Zend引擎,使用了一种更有效的编译——执行方式,而不是PHP 3.0 採用的执行 ——当解析时模型。
优越性
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的系统生成技术。
(6)COM/DCOM 支持PHP 4.0 提供 COM/DCOM 支持 ( 仅用于Windows 环境 ) 可以无缝地存取和访问 COM 对象。
(7)与PHP 3.0 兼容性很好PHP 4.0 是与 PHP 3.0 代码向后兼容性接近100%。由于 PHP 4 的改进的体系结构,两者有一些细微的差别,大多数人将可能永远不可能遇上这种情况。
(8)配置PHP4重新设计和增强了PHP.ini档案,这使得用PHP.ini来配置PHP显得极为容易,这个档案可以在运行时被Apache(unix系统)或由Windows 注册(Windows 环境)。
(9)加密支持PHP4实现了完整的加密,这些加密功能是一个完整的mycrypt库,并且 PHP 4.0 支持哈希函式。Blowfish,TripleDES,MD5,并且SHA1 也是可使用的一些加密算法。
(10)类型检查PHP 4.0 支持同一操作符用于评类型检查===(3 等号运算符,恆等计算符),为在两个值和其类型之间作检查。例如,'3' ===3 将视为假 ( 类型是不同的),而 3 ==3 ( 相等判断,不比较类型 ) 将视为真。
(11)FTP 支持PHP 4.0 支持 FTP。通常,你会为通过一个数据机连线下载一个大档案提供一个接口。,如果你确实有需要,可以使用PHP。
(12)PHP4新增函式或功能增强函式PHP 4.0 新增了许多函式,也将许多现有的函式功能进行了增强,以下是一些例子。array_count_values() eval() foreach() include() ob_end_clean() ob_end_flush() ob_get_contents() ob_start()strip_tags() unset()。
(13)here列印PHP 4.0 的Here列印是与Perl类似的,儘管完全不相同。Here是列印大容量文章的一个有用的方法,例如在HTML档案中,不会漏掉任何一个字元,例如目录标记。
(14)HTTP Session fallback 系统为 HTTP Session管理的一个 fallback 系统在 PHP 4.0被实现。预设情况下,Session标识符由cookies存储。如果没有cookies支持或一项cookies任务失败,Session标识符自动被创建并在 URL 的查询字元串中被携带。
(15)ISAPI 支持PHP 4.0 能作为一个个性化的 ISAPI 模组作为IIS外挂程式。这比 PHP 3.0 更有效,它作为一个外部的程式来运行。
(16)记忆体PHP 4.0 能更有效的使用记忆体,导致较少的记忆体占用消耗,这主要归功于引用计数技术的实现。⒄其他类成员函式在 PHP 4.0 你能在成员函式本身的作用域或全局範围内调用其他类的成员函式。例如,你能用一个子函式覆盖父函式,并在子函式中调用父函式。
(17)多维数组在 PHP 4.0 ,利用GET,POST,Cookies的进行的数据传输支持多维数组。
(18)个性化的 HTTPSession支持HTTP Session处理,包括 fallback系统管理,在 PHP 4.0被它的新库函式实现。在版本 3.0 中处理Session要求使用 PHPLIB 和第三方的库函式,它比把Session直接地由 PHP 支持慢了许多。
(19)个性化的 Java 支持PHP 4.0 支持和java的互动。这种个性化的Java 支持为PHP 在 Java 对象上创建和使用方法提供一个简单并且有效的工具。
(20)对象和数嵌套组PHP 4.0 实现了功能更加强大的对象,移去了 PHP 3.0存在的种种句法限制。对象能在数组以内被嵌套并且反过来也如此,可以根据你的需要实现嵌套。
(21)面向对象的编程PHP 4.0 为面向对象的编程和构造类及对象提供扩展的功能和新特徵。PHP4实现了对象重载,引用技术等新技术。
(22)对象重载支持对象重载语法允许第三方的基于面向对象的类库使用 PHP4 的面向对象的特徵存取他们自身的功能。使用这个特徵的一个 COM 模组已经被实现了。
(23)输出缓冲支持PHP 提供了一个输出缓冲函式集合。输出缓冲支持允许你写包裹函式功能压缩缓冲区。在 PHP4 的输出缓冲支持允许 HTML 头信息存放,无论 HTML的正文是否输出。头信息( (header(),content type,and cookies ) 不採用缓冲。
(24)增加了PCRE库PHP 4.0 包括一个 Perl 兼容的正则表达式(PCRE ) 库,和正常regex库一起与 PHP 绑定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正规表达式之间有一些细微差别。
(25)PHP.ini 档案PHP.ini档案在 PHP4.0 被重新设计,使用的 PHP 的配置PHP.ini是更容易并且更有效的。全部档案能被Apache 在运行时间操作 ( 在 Apache环境 下 ) 或由 Windows 注册表 ( 在 Windows 下面 )。被加入PHP.ini档案的配置指令自动地在所有相关的模组中被支持。
(26)引用计数PHP 4.0 为系统中的每个数值提供了引用计数,包括资源。一旦一个资源不再被任何变数引用,它自动地被释放以节省记忆体资源。利用这个特徵的最明显的例子一个内置SQL查询的循环语句。在PHP 3.0中 ,每次递归的 SQL 结果集合重複申请记忆体,直到脚本执行完毕,这些结果集合占用的记忆体才被释放。
(27)支持引用通过引用可以改变一个变数的值。
(28)函式的运行时绑定PHP 4.0 的运行时间绑定功能允许你在他们被声明以前调用,无论声明是否在代码以后或是在运行时间。
(29)类的运行时信息PHP 4.0 支持在运行时刻存取下列类信息一个对象的类名,一个对象的父类的类名字,以及对象函式所在的名字。
(30)伺服器抽象层为支持Web伺服器提供了增强型 SAPI ( 伺服器 API ) 接口,是 PHP 4.0 不可分的一部分。这个伺服器抽象层,提供了通用的WEB伺服器接口支持,支持多执行绪WEB伺服器,为大多数的WEB伺服器提供透明的支持,这些伺服器包括 Apache,IIS ( ISAPI ),以及 AOL 伺服器。
(31)语法的点亮显示PHP 4.0 语法的点亮显示允许开发者看见原始码而不是脚本,这个功能比PHP 3.0中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的HTML代码。
(32)由引用改变变数的值PHP 4.0 由引用支持可变的赋值,“关联”的2个变数之中个的任何一个的值被改变,的变数的值同样被改变,这类似与C中的指针类型。
(33)在引用字元串中的变数引用PHP 4.0 增强了在引用字元串中的变数引用。
PHP5
PHP5在长时间的开发及多个预发布版本后,2004年7月13日,PHP5.0发布。该版本以Zend引擎Ⅱ为引擎,并且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本强化更多的功能。,完全实现面向对象,提供名为PHP兼容模式的功能。是XML功能,PHP5.0版本支持可直观地访问XML数据、名为SimpleXML的XML处理用界面。还强化了XMLWeb服务支持,而且标準支持SOAP扩展模组。资料库方面,PHP新版本提供旨在访问MySQL的新界面——MySQL。除此前的界面外,还可以使用面向对象界面和预处理语句(Prepared Statement)等MySQL的新功能.,PHP5.0上还捆绑有小容量RDBMS-SQLite.
新对象模式
构造函式和析构函式 对象的引用 对象的克隆 对象中的私有、公共及受保护模式 接口 (Interfaces)
抽象类 __call __set 和 __get 静态成员
构造函式和析构函式
在 PHP4 中,当函式与对象同名时,这个函式将成为该对象的构造函式,并且在 PHP4 中没有析构函式的概念。
在 PHP5 中,构造函式被统一命名为 __construct,并且引入了析构函式的概念,被统一命名为 __destruct。
对象的引用
在PHP4中,传递变数给一个函式或方法,实际是把这个变数做了一次複製,也就意味着你传给函式或方法的是这个变数的一个副本,除非你使用了引用符号“&;” 来声明是要做一个引用,而不是一个 Copy。在 PHP5中,对象总是以引用的形式存在的,对象中的赋值操作同样也都是一个引用操作。
对象的克隆
当一个对象始终以引用的形式来被调用时,如果我想得到该对象的一个副本,该怎幺办呢?PHP5 提供了一个新的功能,就是对象的克隆,语法为 __clone。
抽象类
抽象类不能被实例化。
抽象类与其它类一样,允许定义变数及方法。
抽象类同样可以定义一个抽象的方法,抽象类的方法不会被执行,不过将有可能会在其派生类中执行。
__call
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
__set 和 __get
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变数和方法。
类型指示
在 PHP5 中,你可以在对象的方法中指明其参数必须为另一个对象的实例。
静态成员
静态成员和静态方法在面象对象编程的术语中被称作 “类方法(class methods)” 和 “类变数(class variables)”。
“类方法” 在一个对象没有实例化前允许被调用。同样,“类变数” 在一个对象没有实例化前可以被独立操作控制(不需要用一个对象的方法来控制)。
异常处理
异常处理是公认的处理程式错误的理想方法,在 Java及 C 中都有这个概念,我们欣喜的看到,在 PHP5 已经加入了这方面的套用。你可以尝试使用 “try” 和 “catch” 来控制程式的错误。当有错误发生的时候,代码会把错误交给 “catch” 子句来处理,在 “catch” 子句中,你需要指明要把错误交给某个对象处理,这样做可以使代码结构看起来更清晰,因为我们可以把所有的错误信息交给一个对象来处理。
自定义错误处理
你可以很方便的用自定义的处理错误的代码来控制你的程式中的意外。你仅仅需要从异常类中派生出一个自己的错误控制类,在你自己的错误控制类中,你需要有一个构造函式和一个 getMessage 方法。
命名空间
名称空间对类的分组或函式分组很有用。它可以把一些相关的类或函式给组合到一起,方便以后调用。
例名称空间
<?phpnamespacemy\name;//参考"定义命名空间"小节classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=new\my\name\MyClass;//参考"全局空间"小节$a=strlen('hi');//参考"使用命名空间后备全局函式/常量"小节$d=namespace\MYCONST;//参考"namespace操作符和__NAMESPACE__常量”小节$d=__NAMESPACE__.'\MYCONST';echoconstant($d);//参考"命名空间和动态语言特徵"小节?>
注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那幺你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。
加密
从PHP5.3开始支持ZendGuard加密方式,必须安装Zend Guard Loader,老的zend optimizer将不被支持。
Linux安装Zend Guard Loader支持的过程:
作业系统为CentOS5.5,PHP版本为5.3.8(CentOS5.5中的PHP默认版本较低,如果要升级到PHP最新版,可以使用remi的report源进行升级)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安装的话,就需要安装在iis或者和nginx搭配。
1、下载最新的Linux作业系统系下的Zend Guard Loader。
2、上传至Linux伺服器并解压缩,注意阅读生成目录下的README档案。全文如下(添加必要的注释)。在/etc/php.d/目录下创建档案zend.ini,内容如下
zend_extension=/usr/lib64/php/modules/ZendGuardLoader.so
注意路径一定要写上,刚开始没写路径,老是载入不上ZendGuardLoader .so,也可以直接将上面的配置写入/etc/php.ini档案中,效果一样。
3、重启httpd服务service httpd restart。
4.输出<?php phpinfo(); ?>
PHP 5.5 正式版发布 不再支持 Windows XP
PHP 开发者也提醒用户,PHP 5.5 也包含一些不向后兼容的内容,包括不再支持 Windows XP 和 2003 系统;不区分大小写的匹配函式、类;常数名称跟 Locale 无关,这对一些使用非 ASCII 代码的常量名的开发者需要注意的。
版本6构想
1、支持Unicode。Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬体设备越来越强大,网速也大幅度的提升,这幺一点小小的缺点是可以忽略的。一点,PHP也可以在.ini档案中设定能不能开启支持Unicode,决定权在你自己,这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字元串的函式。
2、Register Globals 将被移除这是一个主要的决定,老的PHP使用者会觉得Register Globals满方便的,却忽略了Register Globals会带来程式上安全性的隐患,大多数的主机上此项功能是关闭的,印象中从PHP4.3.x版开始,此项默认配置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程式是PHP3时代的产物,将完全不能运用,除了改写用途外,别无他法。
3、Magic Quotes 将取消Magic Quotes主要是自动转义须要转义的字元,此项功能移除也符合大多数PHP开发者的心声。
4、Safe Mode 取消。老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到。
5、’var’ 别名为 ‘public’,在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。
6、通过引用返回将出错未来通过引用返回编译器将会报错 例如$a =& new b()、function &c(),OO语言默认就是引用,所以不须要再运用 &了。
7、zend.ze1 compatbility mode 将被移去(Zend.ze1相容模式将被移去),PHP5是为兼容旧有PHP4,所以在.ini中可选择是否开启相容模式,原由在于PHP5运用的是第二代分析引擎,相容模式并不是百分之百能分析 PHP4语法,所以旧时代的产物,移除。
8、Freetype 1 and GD 1 support 将不见这两个Libs存在了很久,php6将不再支持,况且GD1早已被现在的GD2取代了。
9、dl() 被移到 SAPI 中dl()主要是让设计师载入extension Libs,被移到 SAPI 中。
10、Register Long Array 去除 从PHP5起默认是关闭,在PHP6中正式移除。
11、一些Extension的变更例如 XMLReader 和 XMLWriter 将不再是以Extension的方式出现,他们将被移入到PHP的核心之中,并且默认是开启,eregextension将被放入PECL,代表着它将被移出PHP核心,这也是为了让路给新的正则表达式extension,,Fileinfo extension 也将被导入PHP的核心之中。
12、APC将被导入核心这是一个提高PHP性能的功能,它将被放入PHP核心中,并且可以选择是否启用APC。
13、告别ASP风格的起始标籤原来是为了取悦ASP开发者转向运用 PHP,现今已经不再须要这种做法了。
,别期望PHP6的性能可以彻底超过PHP5,有可能PHP6的执行效率会比PHP5还要来得慢,可以预期的是,PHP开发小组将会努力的完善PHP6,超越PHP5。
环境配置
Windows下
软体需求(最新版)
Windows Vista 或更高版本;
Apache 2+ 或 IIS 6+ 或 Nginx
安装过程
- 将 Apache 1.3.19 安装到 C:\Web\apache\ 目录下。
- 将 PHP 4.0.5 解压到 C:\Web\php\ 目录下。
- 将 MySQL 3.23.38 安装到 C:\Web\mysql\ 目录下。
- 将 C:\web\php\php4ts.dll 档案拷贝到 C:\WINNT\system32\ 目录下。
- 将 C:\web\php\php.exel 档案拷贝到 C:\WINNT\ 目录下。
- 将 C:\web\php\php.ini-dist 档案拷贝到 C:\WINNT\ 目录下,并将php.ini-dist 更名为 php.ini。
- 运行 C:\Web\apache\Apache\Apache.exe-i –n
- 运行 C:\Web\mysql\bin\mysqld-nt.exe--install
- 编辑 C:\WINNT\php.ini
找到 “extension_dir = ./ ” 栏位,将其改为 extension_dir = "C:\myphp\php\extensions"。
编辑 C:\Web\apache\Apache\conf\httpd.conf
找到“ #BindAddress” 栏位
将其改为 BindAddress127.0.0.1。(如果主机有固定IP位址,此处改为主机IP位址。如 BindAddress 211.101.152.106),找到 “ServerName” 栏位,将其改为 ServerName localhost。(如主机有固定主机名,此处改为主机的主机名。如ServerName bn001)。
找到“ ScriptAlias /cgi-bin/ "C:/Web/apache/Apache/cgi-bin/" ” 栏位,在其下面加入 ScriptAlias /php/ "C:/Web/php/"。找到 “# And for PHP 4.x,use: ” 栏位,在其后面加入
AddTypeapplication/x-httpd-phpActionApplication/x-httpd-php"c:/Web/php/php.exe"
找到“ #LoadModule usertrack_module modules/mod_usertrack so” 栏位,LoadModule php4_module c:/web/php/sapi/php4apache.dll
UNIX下
所需软体
php-3.0.14-win32.zip;php-3.0.14-win32.zip;mysql-shareware-3.22.32-win.zip
所有软体均安装在/export/home/guoj/下,也可在其他目录。
安装mysql
gzip-dcmysql-3.22.30.tar.gz|tarxvf-cdmysql-3.22.30./configure-prefix=/export/home/guoj/mysqlmakemakeinstallscripts/mysql_install_dbcd../mysql/binbin/safe_mysqld&安装phpapachegzip-dcapache_1.3.11.tar.gz|tarxvf-gzip-dcphp-3.0.11.tar.gz|tarxvf-cdapache_1.3.11./configure-prefix=/export/home/guoj/wwwcd../php-3.0.11./configure-with-apache=/export/home/guoj/apache_1.3.11-with-mysql=/export/home/guoj/mysql-enable-track-varsmakemakeinstallcd../apache_1.3.11./configure--prefix=/export/home/guoj/www--activate-module=src/modules/php3/libphp3.aPmakemakeinstallcd../php-3.0.11cd../php3.ini-distphp3.iniviphp3.ini修改php3.inidoc_root=/export/home/guoj/www/htdocs/extension_dir=/export/home/guoj/php-3.0.11/extension=php3_mysql.dllcpphp3.ini/usr/local/lib/php3.inivi../www/conf/httpd.conf
加上以下几句
<Directory"/export/home/guoj/php-3.0.11/">OptionsFollowSymLinksAllowOverrideNone</Directory>../www/bin/apachectlstart
其他方面
PHP 在资料库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的资料库或是数据档案
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相当多的通讯协定 (protocol),包括了与电子邮件相关的 IMAP,POP3;网管系统 SNMP;网路新闻NNTP;帐号共用 NIS;全球信息网 HTTP 及 Apache 伺服器;目录协定 LDAP 以及其它网路的相关函式。
除此之外,用 PHP 写出来的 Web 后端 CGI 程式,可以很轻易的移植到不同的作业系统上。例如,先以 Linux 架的网站,在系统负荷过高时,可以快速地将整个系统移到 SUN 工作站上,不用重新编译 CGI 程式。面对快速发展的 Internet,这是长期规划的最好选择。
相关语法及概念
php 支持八种原始类型。
四种标量类型boolean(布尔型) integer(整型) float(浮点型,也作“double”) string(字元串)
两种複合类型array(数组)object(对象)
是两种特殊类型resource(资源)NULL
为了确保代码的易读性,本手册还介绍了一些伪类型mixed、number、callback
语法(例子中均忽略了PHP代码边界符 <?php ?>)
注释的语法有三种
//comment这个是单行注释/comment/这个是多行注释#comment这个是脚本类型注释,很少用
基本的结构控制语句:
//分支结构(选择结构)if(condition){//Statement}if(condition){//Statement}else{//Statement}if(condition){//Statement}elseif(condition){//Statement}//多分支结构switch($变数){case'值'://Statementbreak;case'值2'://Statementbreak;default://Statement}//循环结构while(condition){//Statement}do{//Statement}while(condition);for(初始化;判断;变化){//Statement}//数组遍历专用循环语句foreach($Arrayas$value){echo$value;}foreach($Arrayas$key=>$value){echo$key;echo$value;}
一个PHP实例
<html><head><title>Firstprogram</title></head><body>//php中string类型的拼接符和其它大多数採用"+"号运算符不一样,而是採用"."号运算//在一般语言中用于对象属性和方法调用的"."运算符,则和C语言的结构体一样用"=>"<?phpecho"helloworld"."!";?></body></html>
php对面向对象的支持
面向对象编程的概念
不同的作者之间说法可能不一样,一个OOP语言必须有以下几方面
1.抽象数据类型和信息封装
2.继承
3.多态
在PHP中是通过类来完成封装的
//在OOP类中,通常採用大双驼峰命名法,每个单词的首字母都大写classSomething{//作用域修饰符public公共的;private私有的;protected受保护的;//属性的名称一般用全小写private$x=null;//在编程建议中,内部使用的属性应该给私有修饰符,然后通过方法取值赋值//方法的名称一般用小驼峰命名法,第一个单词全小写,剩下的单词首字母大写//因为PHP不会自动为变数使用$this所以必须主动加上$this伪变数来指向操作的对象publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}}
你可以按自己的喜好进行定义,但最好保持一种标準,这样会更有效。数据成员在类中使用"var"声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(associative array)或者是一个对象。方法在类中被定义成函式形式,在方法中访问类成员变数时,你应该使用$this->name,否则对一个方法来说,它只能是局部变数。
使用new操作符来创建一个对象
$obj=newSomething;
然后你可以使用成员函式通过
$obj->setX(5);$see=$obj->getX();echo$see;
在这个例子中,setX成员函式将5赋值给对象的成员变数x(不是类的),然后getX返回它的值5。可以象$obj->x=6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变数。如果你把成员变数看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程式设计师。不幸的是,PHP不支持声明私有成员变数,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用extends关键字。
classAnotherextendsSomething{private$y;publicfunctionsetY($v){$this->y=$v;}functiongetY(){return$this->y;}}
"Another"类的对象拥有了父类(Something)的全部的数据成员及方法,而且还加上了自己的数据成员和方法。
你可以使用
$obj2=newAnother;$obj2->setY(5);echo$obj2->getY();
PHP只支持单继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在"Another"类中重定义了getX方法(方法重写),我们就不能使 用"Something"中的getX方法了。如果你在派生类中声明了一个与基派同名的数据成员,那幺当你处理它时, 它将“隐藏”基类的数据成员。
你可以在你的类中定义构造函式。构造函式是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如
classSomething{private$x=null;//新版本的构造函式放弃使用类名,而统一使用__construct()publicfunction__construct($x){$this->x=$x;}publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}//析构函式publicfunction__destruct(){}}
所以你可以创建一个对象,通过
$obj=newSomething(6);
构造函式会自动地把6赋值给数据变数x。构造函式和方法都是普通的PHP函式(”__“两个下划线,魔术方法),所以你可以使用预设参数。
publicfunction__construct($x="3",$y="5"){}
接着
$obj=newSomething();//x=3andy=5$obj=newSomething(8);//x=8andy=5$obj=newSomething(8,9);//x=8andy=9
预设参数使用C++的方式,所以你不能忽略Y的值,而给X一个预设参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用预设参数。
当一个派生类的对象被创建时,只有它的构造函式被调用,父类的构造函式没被调用,如果你想调用基类的构造函式,你必须要在派生类的构造函式中用parent::__construct()调用。可以这样做是在派生类中所有父类的方法都是可用的。
classAnotherextendsSomething{publicfunction__construct(){parent::__construct(5,6);//显示调用基类构造函式}}
OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程式设计师从基类派生,这样可以确保新的类包含一些期待的功能。在PHP中没有标準的方法,如果你需要这个特性,可以通过定义基类,并在它的构造函式后加上"die" 的调用,这样就可以保证基类是不可实例化的,在每一个方法(接口)后面加上"die" 语句,所以,如果一个程式设计师在派生类中没有覆盖方法,将引发一个错误。而且因为PHP 是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那幺在基类中增加一个方法来实义类的身份(返回某种标识id),并且在你接收到一个对象参数时校验这个值。,如果一个不好的邪恶程式设计师在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多在懒惰的程式设计师身上,而不是邪恶的程式设计师。
,能够让基类对程式设计师无法看到是很好的,只要将接口列印出来做他们的工作就可以了。PHP 5 引入了析构函式的概念,这类似于其它面向对象的语言,如 C++。析构函式会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
重载(与覆盖不同)在PHP中不支持,因为PHP是弱类型语言。在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,有不同数量或类型的参数(这要看语言)。PHP 是一种鬆散类型的语言,所以通过类型重载不起作用,通过参数的个数不同来重载也不起作用。
有时在OOP中重载构造函式非常好,这样你可以通过不同的方法创建对象(变数函式)。在PHP中实现它的技巧是
classMyclass{publicfunctionMyclass(){$name="Myclass".func_num_args();//这个函式返回的是传过来参数的个数$this->$name();//这里使用的是一个变数函式,以这个变数的值作为函式的名称调用}publicfunctionMyclass1($x){//code}publicfunctionMyclass2($x,$y){//code}}
通过在类中的额外的处理,使用这个类对用户是透明的
$obj1=newMyclass('1');//将调用Myclass1$obj2=newMyclass('1','2');//将调用Myclass2
有时这个非常好用。
多态
多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个figure的类,它定义了一个draw的方法。并且派生了circle和rectangle 类,在派生类中你覆盖了draw方法,你可能还有一个函式,它希望使用一个参数x,并且可以调用$x->draw()。如果你有多态性,调用哪个draw方法就依赖于你传递给这个函式的对象类型。
多态性在象PHP这样的解释语言(想像一下一个C++编译器生成这样的代码,你应该调用哪一个方法?你也不知道你拥有的对象是什幺类型的,好,这不是重点)是非常容易和自然的。所以PHP支持多态性。
classCalc{functionniceDrawing($x){//假设这是Board类的一个方法$x->draw();}}classCircle{publicfunctiondraw(){echo"画了一个圆";}}classRectangle{publicfunctiondraw(){echo"画了一个矩形";}}$board=newCalc;$obj=newCircle(3,187);$obj2=newRectangle(4,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 进行序列化对于保存对象的成员变数非常有用。(你也可以将相关数组和数组序列化到一个档案中)。
例子 :
$obj=newClassfoo();$str=serialize($obj);//保存$str到磁碟上$obj2=unserialize($str);//几个月以后//从磁碟中装入str
你恢复了成员数据,不包括方法(根据文档所说)。这导致了只能通过类似于使用$obj2->x来存取成员变数(你没有别的方法!)的唯一办法,所以不要在家里试它。
有一些办法可以解决这个问题,我把它留着,因为对这篇简洁的文章来说,他们太不好。我会很高兴地欢迎在PHP的后续版本中有全序列化的特性。
使用类进行数据存储PHP和OOP一件非常好的事情就是,你可以很容易地定义一个类来操作某件事情,并且无论何时你想用的时候都可以调用相应的类。假设你有一个HTML表单,用户可以通过选择产品ID号来选择一个产品。在资料库中有产品的信息,你想把产品显示出来,显示它的价格等等。你拥有不同类型的产品,并且同一个动作可能对不同的产品具有不同的意思。例如,显示一个声音可能意味着播放它,对于其它种类的产品可能意味着显示一个存在资料库中的图片。你可以使用OOP或PHP来减少编码并提高质量
定义一个产品的类,定义它应该有的方法(例如显示),然后定义对每一种类型的产品的类,从产品类派后出来(SoundItem类,ViewableItem类,等等),覆盖在产品类中的方法,使它们按你的想法动作。
根据资料库中每一种产品的类型(type)栏位给类命名,一个典型的产品表可能有(id,type,price,description,等等栏位)...然后在处理脚本中,你可以从资料库中取出type值,然后实例化一个名为type的对象
$obj=new$type();$obj->action();
这是PHP的一个非常好的特性,你可以不用考虑对象的类型,调用$obj的显示方法或其它的方法。使用这个技术,你不需要修改脚本去增加一个新类型的对象,只是增加一个处理它的类。
这个功能很强大,只要定义方法,而不去考虑所有对象的类型,在不同的类中按不同的方法实现它们,然后在主脚本中对任意对象使用它们,没有if...else,也不需要两个程式设计师,只有高兴。
你同意编程是容易的,维护是便宜的,可重用是真的吗?
如果你管理一组程式设计师,分配工作就是很简单的了,每个人可能负责一个类型的对象和处理它的类。
可以通过这个技术实现国际化,根据用户所选的语言栏位套用相应的类就可以了,等等。
拷贝和克隆
当你创建一个$obj的对象时,你可以通过$obj2=$obj来拷贝对象,新的对象是$obj的一个拷贝(不是一个引用),所以它具有$obj在当时的状态。有时候,你不想这样,你只是想生成一个象obj类一样的一个新的对象,可以通过使用new语句来调用类的构造函式。在PHP中也可以通过序列化,和一个基类来实现,但所有的其它类都要从基类派生出来。
进入危险区域
当你序列化一个对象,你会得到某种格式的字元串,如果你感兴趣,你可以调究它,其中,字元串中有类的名字(太好了!),你可以把它取出来,象
$herring=serialize($obj);$vec=explode(':',$herring);//以:为标识符把字元串拆分成一个数组$nam=str_replace("\",'',$vec[2]);
所以假设你创建了一个"Universe"的类,并且强制所有的类都必须从universe扩展,你可以在universe 中定义一个clone的方法,如下
classUniverse{//在新的PHP版本中克隆(__clone())是一个魔术方法,不要和这个方法搞混了functionclone(){$herring=serialize($this);$vec=explode(':',$herring);$nam=str_replace("\"",'',$vec[2]);$ret=new$nam;return$ret;}}//然后$obj=newSomething();//从Universe扩展$other=$obj->clone();
你所得到的是一个新的Something类的对象,它同使用new方法,调用构造函式创建出的对象一样。我不知道这个对你是否有用,Universe类可以知道派生类的名字是一个好的经验。想像是唯一的限制。
模板引擎
- SmartySmarty的特点是将模板编译成PHP脚本,然后执行这些脚本。很快,非常方便。
- Heyes Template Class一个非常容易使用,但功能强大并且快速的模板引擎,它帮助你把页面布局和设计从代码中分离。
- FastTemplate一个简单的变数插值模板类,它分析你的模板,把变数的值从HTML代码中分离处理。
- ShellPage一个简单易用的类,可以让你的整个网站布局基于模板档案,修改模板就能改变整个站点。
- STP Simple Template Parser一个简单、轻量级并且易于使用的模板分析类。它可以从多个模板中组装一个页面,把结果页面输出到浏览器或者档案系统。
- OO Template Class一个你可以用在自己程式中的面向对象的模板类。
- SimpleTemplate一个可以创建和结构化网站的模板引擎。它可以解析和编译模板。
- bTemplate短小快速的模板类,允许你把PHP逻辑代码从HTML修饰代码中分离。
- Savant一个强大且轻量级的PEAR兼容模板系统。它是非编译型的,使用PHP语言本身做为它的模板语言。
- ETS - easy template system可以使用完全相同数据重组模板的模板系统。
- EasyTemplatePHP适用于你的站点的一个简单强大的模板系统。
- vlibTemplate一个快速、全能的模板系统,它包含一个快取和调试类。
- AvanTemplate多位元组安全的模板引擎,占用很少系统资源。它支持变数替换,内容块可以设定显示或隐藏
- Grafx Software’s Fast Template一个修改版本的Fast Template系统,它包括快取功能,调试控制台以及沉默去除为赋值块。
- TemplatePower一个快速、简单、功能强大的模板类。主要功能有嵌套的动态块支持,块/档案包含支持以及显示/隐藏未赋值的变数。
- TagTemplate这个库的功能被设计来使用模板档案,允许你从HTML档案检索信息。
- htmltmpl: templating engine一个适用于Python和PHP的模板引擎。它面向希望在项目中分离代码和设计的web套用开发人员。
- PHP Class for Parsing Dreamweaver templates一个分析Dreamweaver模板的简单类,被用于Gallery 2 和WordPress的自定义模组中。
- MiniTemplator (Template Engine)针对HTML档案的一个紧凑型模板引擎。对于模板变数和块定义它具有简单的语法。其中块可以嵌套。
- Layout Solution简化网站开发和维护。它拥有常用的变数和页面元素使你不需要重複做页面布局工作。
- Cached Fast Template它已经纳入 FastTemplate ,允许你快取模板档案,甚至可以在分离的块内容上快取不同的规格。
- TinyButStrong一个支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7个方法和两个属性。
- Brian Lozier’s php based template engine只有2K大小,非常快并且是面向对象设计。
- WACT一个从设计中分离代码的模板引擎。
- PHPTAL一个PHP下面的XML/XHTML模板库。
- Rong_View_WudimeiWudimei开发的国产框架Rong Framework的模板引擎,它类似于smarty,优点是速度快,缺点是模板标籤较少,不过够用了。
框架介绍thinkphp
ThinkPHP是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协定发布,是为了敏捷WEB套用开发和简化企业套用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断最佳化和改进,已经成长为国内最领先和最具影响力的WEB套用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。
PHP认证级别
PHP课程由初级(IFE)、中级(IPE)和高级(IAE)三个部分。
- IFE即Index Front-end Engineer的缩写,指数前端工程师的意思。
- IPE即 Index PHP Engineer 的缩写,意思是指数PHP工程师。
- IAE即 Index architecture/advanced engineer 的缩写,意思是指数高级/架构工程师。
PHP安全
PHP其实不过是Web伺服器的一个模组功能,所以要保证Web伺服器的安全。Web伺服器要安全又必须是先保证系统安全,这样就扯远了,无穷无尽。常见的web安全漏洞有注入攻击,跨站攻击,伺服器自身漏洞等,对应的详细解释,详见扩展阅读中的《WEB安全性-2010_OWASP_TOP10》,这里有很详尽的解释。
PHP的优点学习过程和方法
PHP的语法类似于C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那幺你对于其他几种语言的学习都很简单了。你只需要很短的时间内将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软体或者手工来製作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的,你可以很轻鬆的加入PHP使得你的站点更加具有动态特性。
资料库连线
PHP可以编译成具有与许多资料库相连线的函式。PHP与MySQL是绝佳的组合,如果再加上Apache伺服器,就是相当完美的了。你还可以自己编写外围的函式取间接存取资料库。通过这样的途径当你更换使用的资料库时,可以轻鬆的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。
可扩展性
就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程式设计师来说为PHP扩展附加功能可能会比较难,对于一个PHP程式设计师来说并不困难。
PHP可伸缩性
传统上网页的互动作用是通过CGI来实现的。CGI程式的伸缩性不很理想,因为它为每一个正在运行的CGI程式开一个独立进程。解决方法就是将经常用来编写CGI程式的语言的解释器编译进你的web伺服器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。
PHP免费安装
PHP原始码包安装版这个版本适合已经有自己独立的网站域名、网站空间的专业网站建设用户。使用方法依然其为简单,只需三步
第一、到官方网站下载 PHP原始码包安装版最新版本,解压下载档案,将其中的全部内容上传到你的支持PHP的网站空间
第二、改更档案属性,请将根目录下以PHP为后缀名的档案和”/include/domain.php”和 “/attachments” 和 “/data”资料夹以及资料夹下所有的档案属性改成“可读”、“可写”、“可执行”,通常是“755”。
第三、打开你的网站根目录,系统会自动运行setup安装程式,按提示点下一步操作即可。
友情提示当你下载我们的软体并看到这份说明时,则说明你一定是对企业网站建设有一定的需求或者你是一个网站建设技术学习者。
档案格式
- 对于只含有 php 代码的档案,我们将在档案结尾处忽略掉 "?>"。这是为了防止多余的空格或者其它字元影响到代码。
例如
$foo = 'foo';
- 缩进应该能够反映出代码的逻辑结果,儘量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软体的灵活性。
例如
if(1==$x){$indented_code=1;if(1==$new_line){$more_indented_code=1;}}
- 变数赋值建议保持相等间距和排列。
例如
$variable='demo';$var='demo2';
- 每行代码长度应控制在80个字元以内,最长不超过120个字元。因为 linux 读入档案一般以80列为单位,就是说如果一行代码超过80个字元,那幺系统将为此付出额外操作指令。这个虽然看起来是小问题,对于追求完美的程式设计师来说也是值得注意并遵守的规范。
- 每行结尾不允许有多余的空格。
Php档案记事本编辑乱码问题
一般情况下,记事本编辑器在对档案进行完编辑并保存之时,其默认编码为ANSI,中文。然则更多的时候,php在语言环境设定时语言多数为utf-8,直接保存并用于apache等http-server解析后就会出现乱码。
为此,应该注意在用记事本编辑完后可将档案用“储存为”的方式对档案进行保存,并将“档案类型”选择“所有档案”,编码与档案指定语言编码一致即可。
算数运算符
PHP 的运算符包括算术运算符、赋值运算符、比较运算符和逻辑运算符。
算数运算符
加,减,乘,除,取模(取余)
+、-、、/、%
+、-、、/、%
赋值运算符(以下解释在许多书中有所不同)
赋值,加赋值,减赋值、乘赋值、除赋值,连字赋值
=、+=、-=、=、/=、.=
位运算符
位与、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比较运算符
等于、全等于、不等于、不全等于、大于、小于、大于等于、小于等于
==、===、!=(<>)、!==、>、<、>=、<=
逻辑运算符
逻辑与、逻辑或、逻辑非、逻辑亦或
&&、||、!、xor
字元串运算符
. 连线两个字元串