LAMP黄金组合——系列四PHP

PHP ,一个 嵌套 的缩写名称,是英文超级文本预处理语言( PHP:Hypertext Preprocessor )的缩写。 PHP 是一种 HTML 内嵌式的语言, PHP 与微软的 ASP 颇有几分相似,都是一种在服务器端执行的嵌入 HTML 文档的脚本语言,语言的风格有类似于 C 语言,现在被很多的网站编程人员广泛的运用。 PHP 独特的语法混合了 C Java Perl 以及 PHP 自创新的语法。它可以比 CGI 或者 Perl 更快速的执行动态网页。用 PHP 做出的动态页面与其他的编程语言相比, PHP 是将程序嵌入到 HTML 文档中去执行,执行效率比完全生成 HTML 标记的 CGI 要高许多;与同样是嵌入 HTML 文档的脚本语言 JavaScript 相比, PHP 在服务器端执行,充分利用了服务器的性能; PHP 执行引擎还会将用户经常访问的 PHP 程序驻留在内存中,其他用户再一次访问这个程序时就不需要重新编译程序了,只要直接执行内存中的代码就可以了,这也是 PHP 高效率的体现之一。 PHP 具有非常强大的功能,所有的 CGI 或者 JavaScript 的功能 PHP 都能实现,而且支持几乎所有流行的数据库以及操作系统。

PHP
最初是 1994 Rasmus Lerdorf 创建的,刚刚开始只是一个简单的用 Perl 语言编写的程序,用来统计他自己网站的访问者。后来又用 C 语言重新编写,包括可以访问数据库。在 1995 年以 Personal Home Page Tools (PHP Tools) 开始对外发表第一个版本, Lerdorf 写了一些介绍此程序的文档,并且发布了 PHP1.0 。在这早期的版本中,提供了访客留言本、访客计数器等简单的功能。以后越来越多的网站使用了 PHP ,并且强烈要求增加一些特性,比如循环语句和数组变量等等,在新的成员加入开发行列之后,在 1995 年中, PHP2.0 发布了。第二版定名为 PHP/FI(Form Interpreter) PHP/FI 加入了对 mSQL 的支持,从此建立了 PHP 在动态网页开发上的地位。到了 1996 年底,有 15000 个网站使用 PHP/FI ;时间到了 1997 年中,使用 PHP/FI 的网站数字超过五万个。而在 1997 年中,开始了第三版的开发计划,开发小组加入了 Zeev Suraski Andi Gutmans ,而第三版就定名为 PHP3 2000 年, PHP4.0 又问世了,其中增加了许多新的特性。

PHP 的特性
PHP 的特性包括:
开放的源代码:所有的 PHP 源代码事实上都可以得到。
PHP
是免费的。
基于服务器端:由于 PHP 是运行在服务器端的脚本 , 可以运行在 UNIX LINUX WINDOWS 下。
嵌入 HTML :因为 PHP 可以嵌入 HTML 语言,所以学习起来并不困难。
简单的语言: PHP 坚持脚本语言为主,与 Java C 不同。
效率高: PHP 消耗相当少的系统资源。
图像处理:用 PHP 动态创建图像

PHP 3 PHP 4
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 的优越性
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() nclude() 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 能更有效的使用内存 , 导致较少的内存占用消耗 , 这主要归功于引用计数技术的实现。
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 正规表达式之间有一些细微差别。
26 PHP.ini 文件: PHP.ini 文件在 PHP4.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 ) 接口 , PHP 4 0 不可分的一部分。这个服务器抽象层 , 提供了通用的 WEB 服务器接口支持 , 支持多线程 WEB 服务器 , 为大多数的 WEB 服务器提供透明的支持 , 这些服务器包括 Apache ,IIS ( ISAPI ), 以及 AOL 服务器。
32 )语法的点亮显示: PHP 4.0 语法的点亮显示允许开发者看见源代码而不是脚本 , 这个功能比 PHP 3 0 中的更有效。它跑得更快,更执行得更好,并且产生更紧凑的 HTML 代码。
33 )由引用改变变量的值: PHP 4.0 由引用支持可变的赋值 , “ 关联 2 个变量之中个的任何一个的值被改变 , 另外的变量的值同样被改变 , 这类似与 C 中的指针类型。
34 )在引用字符串中的变量引用: PHP 4.0 增强了在引用字符串中的变量引用。

数据库方面
PHP 在数据库方面的丰富支持,也是它迅速走红的原因之一,它支持下列的数据库或是数据文件:
· Adabas D
· DBA
· dBase
· dbm
· filePro
· Informix
· InterBase
· mSQL
· Microsoft SQL Server
· MySQL
· Solid
· Sybase
· ODBC
· Oracle 8
· 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 string of text')
- NULL
-
资源( resource
-
阵列 (array - : arrayname[2])
语法 :
语法有三种 :
//comment
/* comment */
# comment
基本的 "Control Structures":
* if ... else
     if (condition == true) ;
* if ... else then
     if (condition == true)
     else if (condition2 == true) ;

一个 PHP 实例 :
<html>
     <head>
          <title>First program</title>
     </head>
     <body>
          <?php
               echo "hello world";
          ?>
     </body>
</html>

请看 :
php
官方网站: www.php.net
php
对面向对象的支持
面向对象编程的概念:
  不同的作者之间说法可能不一样,但是一个 OOP 语言必须有以下几方面:
  抽象数据类型和信息封装
  继承
  多态
  在 PHP 中是通过类来完成封装的:

   <?php
   class Something {
   // 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->setX(5);
   $see=$obj->getX();
  在这个例子中, setX 成员函数将 5 赋值给对象的成员变量 x( 不是类的 ) ,然后 getX 返回它的值 5 。可以象: $obj->x=6 那样通过类引用方式来存取数据成员,这不是一个很好的 OOP 习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的 OOP 程序员。不幸的是, PHP 不支持声明私有成员变量,所以不良代码在 PHP 中也是允许的。继承在 PHP 中很容易实现,只要使用 extend 关键字。
   <?php
   class Another extends Something {
   var $y;

   function setY($v) {
   $this->y=$v;
   }

   function getY() {
   return $this->y;
   }

   }

   "Another" 类的对象现在拥有了父类 (Something) 的全部的数据成员及方法,而且还加上了自己的数据成员和方法。

  你可以使用
   $obj2=new Something;
   $obj2->setX(6);
   $obj2->setY(7);

   PHP 现在还不支持多重继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在 "Another" 类中重定义了 getX 方法,我们就不能使 "Something" 中的 getX 方法了。如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时, 它将 隐藏 基类的数据成员。

  你可以在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如:

   <?php
   class Something {
   var $x;

   function Something($y) {
   $this->x=$y;
   }

   function setX($v) {
   $this->x=$v;
   }

   function getX() {
   return $this->x;
   }

   }

  所以你可以创建一个对象,通过:
   $obj=new Something(6);

  构造函数会自动地把 6 赋值给数据变量 x 。构造函数和方法都是普通的 PHP 函数,所以你可以使用缺省参数。

   function Something($x="3",$y="5")

  接着:

   $obj=new Something(); // x=3 and y=5
   $obj=new Something(8); // x=8 and y=5
   $obj=new Something(8,9); // x=8 and y=9

  缺省参数使用 C 的方式,所以你不能忽略 Y 的值,而给 X 一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数。
  当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中显示调用。可以这样做是因为在派生类中所有父类的方法都是可用的。
   <?php
   function Another() {
   $this->y=5;
   $this->Something();
   // 显示调用基类构造函数

   }

   OOP 的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能。在 PHP 中没有标准的方法,但是:如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上 "die" 的调用,这样就可以保证基类是不可实例化的,现在在每一个方法 ( 接口 ) 后面加上 "die" 语句,所以,如果一个程序员在派生类中没有覆盖方法,将引发一个错误。而且因为 PHP 是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份 ( 返回某种标识 id) ,并且在你接收到一个对象参数时校验这个值。当然,如果一个邪恶不好的程序员在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多发现在懒惰的程序员身上,而不是邪恶的程序员。
  当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了。在 PHP 中没有析构函数。
  重载 ( 与覆盖不同 ) PHP 中不支持。在 OOP 中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数 ( 这要看语言 ) PHP 是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。
  有时在 OOP 中重载构造函数非常好,这样你可以通过不同的方法创建对象 ( 传递不同数量的参数 ) 。在 PHP 中实现它的技巧是:

   <?php

   class Myclass {
   function Myclass() {
   $name="Myclass".func_num_args();
   $this->$name();
   // 注意 $this->name() 一般是错误的,但是在这里 $name 是一个将被调用方法的名字

   }

   function Myclass1($x) {
   code;
   }

   function Myclass2($x,$y) {
   code;
   }

   }

  通过在类中的额外的处理,使用这个类对用户是透明的:

   $obj1=new Myclass('1'); // 将调用 Myclass1
   $obj2=new Myclass('1','2'); // 将调用 Myclass2

  有时这个非常好用。

多态
   多态 是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个 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 类可以知道派生类的名字是一个好的经验。想象是唯一的限制。
    <?php echo date("Y-m-d H:i:s");?>
这个语句就是写入当前的时间。
PHP5 的发展
       尽管 PHP4 的发展是如此迅猛,但较之于其他流行的开发语言还是缺乏一些关键的功能特性,比如, PHP4 中的面向对象功能并不完善,也无法实现异常( Exception )的捕捉与处理。因此在一些特殊问题的处理上还是捉襟见肘的。
2004
7 月, PHP5 正式版本的发布,标志着一个全新的 PHP 时代的到来。它的核心是第二代 Zend 引擎,并引入了对全新的 PECL 模块的支持。 PHP5 的最大特点是引入了面向对象的全部机制,并且保留了向下的兼容性。程序员不必再编写缺乏功能性的类,并且能够以多种方法实现类的保护。另外,在对象的集成等方面也不再存在问题。使用 PHP5 引进了类型提示和异常处理机制,能更有效的处理和避免错误的发生。
在不断更新的同时, PHP5 依然保留对旧有的 PHP4 程序可以运行于 PHP5 的平台上而不会出现较大问题。随着 MySQL 数据库的发展, PHP5 还绑定了新的 MySQLi 扩展模块,它提供了一些更加有效的方法和实用工具用于处理数据库操作。 PHP5 添加了面向对象的 PDO 模块,提供了另外一种数据库操作的方案,统一数据库操作的 API PHP5 提供了数据库引擎 SQLite 扩展,直接用这个扩展就可以创建和使用 SQLite 数据库。这些方法大都以面向对象的方式实现,同时也极大地提高了基于数据库的 Web 项目的执行速度。
另外, PHP5 中还改进了创建动态图片的功能,目前能够支持多种图片格式(如 PNG GIF TTIF JPGE 等)。 PHP5 以及内置了对 GD2 库的支持,因此安装 GD2 库(主要指 UNIX 系统中)也不再是件难事,这使得处理图像十分简单和高效。
大多数 Web 程序开发者依然将 XML 作为一个彻底的简单数据库使用。 PHP5 中也采用了一系列简单易用、功能强大的方法处理 XML 文档。
    PHP5.2.0
增加了 JSON 函数,更好的支持 ajax
今天,已经有包括 Yahoo.com Amazon.com 等在内的数百万网站,以及众多的开发人员和编程爱好者正在使用 PHP 。从最初的 PHP/FI 到现在的 PHP5 PHP 的发展是及其迅猛的,其未来的发展前景也必定令人瞩目。
php
的最新版本是 5.2.5(2007-11-08 更新 )
php
的官方网站: http://www.php.net/
PHP
PHP 是一种开放源代码的脚本编程语言。主要用于 Web 服务器的服务器端应用程序,用于动态网页设计,是一种嵌入 HTML 页面中的脚本语言。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值