`
isiqi
  • 浏览: 16538895 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

PHP 5.0 的变化与PHP 6.0 展望

阅读更多
一、PHP 5.0中的变化

  作为一个全新的版本号,在PHP 4和PHP 5之间存在许多实质性的区别。大多数的炒作主要围绕被重新改写过的新的对象模型。PHP 5版本更为完整并且运行性能更为良好。在PHP 4中,对象其实仅是一个粗糙的数据类型,并且是值引用的。在试图保持尽可能多的向后兼容性的同时,在PHP 5中,设置zend.ze1_compatibility_mode可以允许与版本4中方法的兼容。当然,PHP 5也存在一些向后不兼容的改变,具体包括:

  ·新的保留下来的关键字大多数与对象模型相关(exception,final, php_user_filter,interface,implements,extends,public,private,protected,abstract,clone,try,catch,throw)。在PHP 4中保留的两个单词不再存在(cfunction,old_function)。

  ·如果一个对象没有任何属性,那么它不再为空(empty)。

  ·现在array_merge()函数只接收数组。

  ·类可以在使用前声明(依赖于具体情况)。

  ·get_class(),get_parent_class()和get_class_methods()现在能够返回一个大小写敏感的结果,而以前的返回结果都是小写的。

  ·strrpos()和strripos()现在使用整个字符串。例如,var_dump(strrpos('ABCDEF','DAF'))将在PHP 4中返回int(3),而在PHP 5中返回bool(false)

  ·如果$_SERVER存在,它将用argc和argv进行填充-这就允许CLI版本总是可以存取这些数据。

  ·当传递一个无效的IP地址时,ip2long()返回FALSE而不是-1。

  ·定义在一个包括文件中的函数现在能够在任何时刻为主文件所调用。如果文件两次被包括(这时函数已经被定义了),PHP 5也将发出一个致命的错误。

  ·require_once()和include_once函数现在考虑到了Windows大小的不敏感性,并且将每次仅包括一个文件-即使该函数以不同大小写的文件名被调用多次。

  ·摆脱了原来PHP 4中的警告。新的PHP 5在遇到一个无效的字符串偏移量时将抛出一个错误。
  
  ·Tokenizer扩展不再定义闲置的T_ML_COMMENT常量。

  注意,这些看似较多的不兼容的变化其实并不大,而且如果你想把原有代码移植到PHP 5中的话,有可能只对你的脚本作极少量的修改即可。PHP 5为做许多事情提供了更好的方法,但是如果你的目的仅是为了能使程序运行,那么你不会遇到太多的麻烦。在PHP 5中的另外一些变化有:

  ·在命令行CLI和CGI脚本作了少许变化,有效地提高了新的CLI地位的重要性。

  ·引入大量的新函数,其中许多是用于处理数组、字符转换和流操作的。

  ·缺省情况下,MySQL客户端库没有与PHP 5绑定到一起。而是,包括了SQLite扩展-它基本上是一微型数据库引擎,其目的是消除任何设置和管理的需要。

  ·新加了mysqli(MySQL增强扩展)(缺省地没有包括在内),为的是充分地利用MySQL 4.1及以上版本的优势。

  想更全面地了解从PHP 4到PHP 5的变化,你可以参考PHP网站上的官方档案。

  二、PHP 5.1.x中的变化

  在本文成文时,刚刚发行PHP 5.1.1(在广为争论的5.1.0出台后不久)。该版本在PHP邮件列表中引起一阵小的骚乱。在5.1.0版本中,某些关键的变化被匆忙地包括进一个随后发行的候选版本中。一切似乎都静悄悄的,直到最后的发行版才引起酣然大波。然而,这些变化在5.1.1中被还原以防止出现pear::date冲突。

  ·如今,闪电般登场的PDO成为PHP核心的一部分。要更多地了解与PHP相关的抽象层知识,可以参考《Database Abstraction in PHP》或者PHP网站上的官方档案。

  ·PDO MySQL驱动程序现在成为存取MySQL的推荐方法-在缺省情况下,并不启用老式的mysqli和mysql扩展。

  ·PHP 5.1比5.0版本在性能上也大大改进。

  ·如前所提及的,日期/时间支持在5.1.0版本中被重写,而在5.1.1版中又被还原。也许以后不久还会有所变化-尽管都是经过仔细计划的。

  ·在PHP 5.0到PHP 5.0.4版本阶段,是支持抽象的私有方法的。然而,现在它们都被取消了。

  ·现在,不允许重复声明一个类常量。下面代码在5.1中不会工作并将抛出一个E_ERROR错误。

<?php
 class anything {
  const const_name = 'value';
  const const_name = 'value2';
 }
?>

  ·14个更旧的扩展被从PHP核心删除。这些包括 ext/cpdf,ext/dbx,ext/dio,ext/fam,ext/ingres_ii,ext/ircg,ext/mcve,ext/mnogosearch,ext/oracle,ext/ovrimos,ext/pfpro,ext/w32api,ext/yp,sapi/activescript。所有这些还可用于PECL中,尽管并不是所有这些扩展都能得到积极维护。

  ·在参考引用的管理上也有所变化。以前我们可以以参考引用方式发送、赋值或返回变量-其实它们应该以值的形式返回。这些包括常数、自身以值形式返回的函数或一个表达式的结果。这里有一个例子:

<?php
$var1 = "value";
function return_val() {
 global $var_name;
 return $var_name;
}
$var2 = &return_val();
?>


  这段代码过去是可以工作的(直到5.0.4版本),但是现在在5.1版本中会抛出一个E_STRICT异常

  也许5.1.x不久也会退场,但是其中引入了许多有价值的改进-PDO的引入可能是最值得称道的。要详细了解PHP文档中的更改日志,可以看一下这里有关PHP 5.1(和早些版本)变化的详尽列表。

PHP 6.0估计会是一个相当激动人心的发行。然而,什么东西都是一分为二的。不过,看起来最令我气恼的三个家伙(register_globals,magic_quotes_gpc和safe_mode)可能要退位了。第一个存在一个很大的安全漏洞;第二个由于操作大量数据所以在改变环境时简直就是一场梦魇;而第三个是一个无人能理解的错误的名称并且会给人带来一种安全方面的错觉。在Unicode问题上,还有大量的工作要做。下面是预计的一些新变化:

  ·register_globals,safe_mode和各种魔术引用选项将被删除。
 
  ·ereg扩展将被删除,而XMLReader,XMLWriter和Fileinfo扩展将被添加到内核上并且在缺省情况下为on状态。
 
  ·我发现的另外一处令人激动的新变化是,APC(Alternative PHP Cache)将被添加到内核上,尽管在缺省情况下为off状态。APC可以为开发者提供严谨的性能益处。

  ·所有的E_STRICT消息将被合并进E_ALL-这又是针对良好编程实践所作出的一个积极更改。

  ·不再支持ASP风格的标签<%。

  ·引入了新的64位整型数。当前的整数类型被保留下来-至于是32还是64位将依赖平台而定。

  ·可以结合多维数组使用foreach,例如foreach($array as $k => list($a, $b))。

  ·在php.ini新引入的一个开关将允许你禁止Unicode语义(缺省地,它们被置为on状态)。

  ·还有各种针对Unicode的字符串操作上的改进。
 
  ·microtime()函数将返回完整的浮点数,而不是象目前的微秒值unix_timestamp。这样更可能有利于大多数人的使用。

  ·不再支持用于字符串索引的{}注释,而[]版本将被添加到substr()和array_slice()功能中。以前的[]为许多人所批评,但是大多数的开发者,包括我在内,都一直使用[]。

  ·在针对CGI SAPI情形时,将一直启用FastCGI,并且不会被禁止。

  ·不再支持古老的HTTP_*_VARS全局变量。

  ·var将有一个新的别名public。在PHP4 类中Var是被允许的,但是在PHP 5中,这将会引发一个警告。在PHP 6中,var将仅是public的一个别名,因此将不会再出现警告。

  ·ze1兼容性模式将被删除-这一方式原来试图保留PHP 4的行为但是却存在一些错误。

  ·不再允许用静态语法来调用动态函数。

  另外,还存在许多要决定的问题,例如命名空间可能更为重要,但是目前基本上还没有得到同意。你可以读一下最近的PHP开发者会议上对于PHP 6的详细讨论。尽管PHP 6尚未出台,但是我相信在其最终发行之前一定存在不少周折。尽管如此,PHP所做出的贡献已得到业界的充分认可,其前途是一片光明的。

分享到:
评论

相关推荐

    xshell5_wm_5.0.1332&Xftp6.0.0175.zip

    xshell5_wm_5.0.1332&Xftp6.0.0175的exe文件,亲测可用。 Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性...

    WINCE 5.0 ,6.0 ,7.0 应用程序自动更新源代码

    真正实现通过配置文件实现WINCE APP 自动更新的通用程序 要点: 1,UPDATELIST 文件第一行为服务器下载文件夹虚拟路径 2,UPDATELIST 文件第二行为本地APP程序 3,需要在SHSAN.EXE 所在文件夹建立temp 子文件夹

    Tomcat5.0和Tomcat6.0

    **Tomcat5.0与Tomcat6.0详解** Tomcat是Apache软件基金会下的Jakarta项目中的一个核心项目,是一款非常流行的开源Java Servlet容器。它实现了Java Servlet和JavaServer Pages(JSP)规范,用于部署和运行Java Web...

    EZ-SCSI5.0和EZ-SCSI 6.0打包下载

    Adptec EZ SCSI 6.0 软件简介: Adaptec出品的SCSI硬盘检测工具,可测试SCSI硬盘速度,查看出厂坏道(Primary Defect List)及成长坏道(Grown Defect List),查看硬盘及SCSI卡当前运行在什么模式。 支持硬件列表(表内...

    .NET 5.0 and 6.0 运行时 取自官网 控制台应用程序专用

    在本机电脑上面运行得好好的,百度查询是缺少.NET 5.0 的运行时因为我是用.NET 5.0框架写的,所以我就去官网下载了.NET 6.0 但是没用只能永.NET 5.0 的运行时才行,之后又下载了.NET 5.0的运行时,这个资源就是 我...

    FLAC3D6_PFC滑坡模型_pfc5.0与flac耦合_PFC数值_PFC_pfc3d6.0plotadd

    本话题主要围绕"FLAC3D6_PFC滑坡模型_pfc5.0与flac耦合_PFC数值_PFC_pfc3d6.0plotadd"展开,讨论如何利用PFC和FLAC3D进行滑坡模型的构建,以及两者之间的耦合方法。 FLAC3D是一款基于离散元法(Distinct Element ...

    WR740N 5.0/6.0/7.0最新固件

    标题提到的"5.0/6.0/7.0最新固件"是指针对这款路由器的不同版本固件更新,固件是控制路由器硬件运行的软件,它包含了路由协议、安全设置、设备管理等功能。 固件升级通常是为了修复已知问题、提升性能、增加新功能...

    spread5.0及6.0使用说明

    《Spread 5.0及6.0使用详解》 Spread是一款功能强大的电子表格控件,广泛应用于Windows Forms和.NET框架的开发中。本篇将详细阐述Spread 5.0及6.0的主要特性、功能以及如何在实际项目中进行有效应用。 一、Spread ...

    IE4.0 IE5.0 IE5.5 IE6.0集合

    标题 "IE4.0 IE5.0 IE5.5 IE6.0集合" 提供了这个压缩包包含的Microsoft Internet Explorer(简称IE)的不同版本,这些版本分别是4.0、5.0、5.5以及6.0。这些浏览器是微软在20世纪90年代末到21世纪初推出的,它们在...

    weboffice_v6.0.5.0.cab 下载

    weboffice_v6.0.5.0.cab 文件下载,在线预览OFFICE文档的插件,非常实用,只需在客户端双击安装即可,亲测可用

    WINCE5.0和WINCE6.0的主要差别

    本文将深入探讨Windows CE 5.0和Windows CE 6.0之间的主要差异,这对于理解和选择合适的开发平台至关重要。 1. 内核架构: Windows CE 5.0采用了传统的微内核结构,其中操作系统核心只处理基本任务,如内存管理、...

    PFC实例源码

    2. **连续介质力学(FEM)**:在PFC中,DEM与FEM结合,用于处理颗粒间的连结部分,如裂缝和岩体的连续部分。FEM允许PFC处理更复杂的几何形状和边界条件。 3. **编程语言**:PFC通常使用C++或Python进行编程。C++...

    Microsoft Word 6.0 5.0 中文版 图文编排技术与实例

    Microsoft Word 6.0 5.0 中文版 图文编排技术与实例

    winCE 5.0 6.0模拟器

    winCE 5.0和6.0是该系统的两个重要版本,分别在2004年和2006年发布。这两个版本的模拟器允许开发者在个人计算机上模拟运行Windows CE系统,以便于测试应用程序和系统功能,而无需实际硬件设备。 **winCE 5.0模拟器*...

    JRE5.0/6.0

    JRE5.0和6.0是Java历史上的两个重要版本,它们为开发者和用户提供了稳定的平台来运行基于Java技术的应用。 在Java的发展历程中,JRE5.0(也称为Java 2 Platform, Standard Edition 5.0,简写为J2SE 5.0)是一个里程...

    ACCP 5.0 java 转ACCP 6.0 桥接课程

    【ACCP 5.0 to ACCP 6.0 ...通过ACCP 5.0到ACCP 6.0的桥接课程,学员能够迅速掌握最新IT技术趋势,提升自身竞争力,适应快速变化的IT行业需求。对于有志于在IT领域深入发展的学员来说,这是一次不容错过的学习机会。

    WinIDE python开发环境 5.0 和 6.0 带注册机

    WinIDE python开发环境 5.0 和 6.0 带注册机 WinIDE python开发环境 5.0 和 6.0 带注册机

Global site tag (gtag.js) - Google Analytics