PHP5与PHP4的区别小议:

一、未100%向下兼容

在php5中尽管大部分PHP4的代码应该不用修改就能运行,还是应该留意以下不向下兼容的改变:

有了一些新关键字。

strrpos() 和 strripos()如今使用整个字符串作为 needle.

非法使用字符串偏移量会导致 E_ERROR 而不是 E_WARNING.一个非法使用的例子:$str = 'abc'; unset($str[0]);.

array_merge() 被改成只接受数组。如果传递入非数组变量,对每个此类参数都会发出一条 E_WARNING 信息。要小心因为你的代码有可能疯狂发出 E_WARNING.

PATH_TRANSLATED 服务器

变量在 Apache2 SAP

I 中不再暗中设定,这和 PHP 4 中的情形相反,如果 Apache 没产生此值则其被设为和 SCRIPT_FILENAME 服务器

变量一样的值。此修改是为了遵守CGI 规范。更多信息参考手册中 $_SERVER['PATH_TRANSLATED'] 的说明。此问题也影响到 PHP >= 4.3.2 的版本。

Tokenizer 扩展不再定义T_ML_COMMENT 常量。如果把 error_reporting 设为 E_ALL,PHP 将产生一条消息。尽管 T_ML_COMMENT 从来都没用到过,还是在 PHP 4 中定义了。在 PHP 4 和 PHP 5 中 // 和 都被解析为 T_COMMENT 常量。但是 PHPDoc 风格的注释 ,自 PHP 5 开始被 PHP 解析,被识别为 T_DOC_COMMENT.

如果 variables_order 包括“S”,$_SERVER 应该带有 argc 和 argv 被产生。如果用户特别配制系统不创建 $_SERVER,那此变量当然就不存在了。改变的地方是不管 variables_order 怎么设定,在 CLI 版本中 argc 和 argv 总是可用的。本来 CLI 版不是总会产生全局变量 $argc 和 $argv 的。

没有属性的对象不再被当成“empty”.

有些情况下类必须在使用前被定义。这仅在使用了一些 PHP 5 的新特性(例如 interfaces)的时候发生。其它情况下行为都没变。

get_class(),get_parent_class() 和 get_class_methods() 如今返回的类/方法名和定义时的名字一致(区分大小写),对于依赖以前行为(类/方法名总是返回小写的)的老脚本可能产生问题。一个可能的解决方法是在脚本中搜索所有这些函数并使用 strtolower()。

区分大小写的改变也适用于魔术常量 __CLASS__,__METHOD__ 和 __FUNCTION__.其值都会严格按照定义时的名字返回(区分大小写)。

ip2long() 在传递入一个非法 IP 作为参数时返回 FALSE,不再是 -1.

如果有函数定义在包含文件中,则这些函数可以在主文件中使用而与是否在 return() 指令之前还是之后无关。如果文件被包含两次,PHP 5 会发出致命错误,因为函数已经被定义,而 PHP 4 不管这个。因此推荐使用 include_once() 而不要去检查文件是否已被包含以及在包含文件中有条件返回。

include_once() 和 require_once() 在 Windows

下先将路径规格化,因此包含 A.php 和 a.php 只会把文件包含一次。

实例: strrpos() 和 strripos() 如今用整个字符串作为 needle

var_dump(strrpos(‘ABCDEF','DEF’)); //int(3)

var_dump(strrpos(‘ABCDEF','DAF’)); //bool(false)

?>

实例: 没有属性的对象不再被当成“empty”

class test { }

$t = new test();

var_dump(empty($t)); // echo bool(false)

if ($t) {

// Will be executed

}

?>

实例: 有些情况下类必须在使用之前定义

//works with no errors:

$a = new a();

class a {

}

//throws an error:

$a = new b();

interface c{

}

class b implements c {

}

?>

二、CLI 和 CGI

PHP 5 中对 CLI 和 CGI 文件名作了些改变。PHP 5 中,CGI 版本被改名为 php-cgi.exe(以前是 php.exe),现在主目录中的是 CLI 版本(之前是 cli/php.exe)。

PHP 5 中引进了一种新模式:php-win.exe.这和 CLI 版本相同,只除了 php-win 不输出任何内容,因此不会提供控制台(屏幕上不会闪过“dos 窗口”)。此行为类似 php-gtk.

PHP 5 中,CLI 版本总会产生全局变量 $argv 和 $argc 而不管 php.ini 是怎么设的。即使将register_argc_argv设为 off 也不影响 CLI.

参见命令行模式。

三、移植配置文件

由于 I SAP

I 模块的名字改了,从 php4xxx 改为 php5xxx,因此需要对配置文件作些修改。CLI 和 CGI 文件名也改了。更多信息请查看相应章节。

移植 Apache 配置极其简单。照下面的例子来检查需要做的修改:

实例: 移植 Apache 配置文件到 PHP 5

# 将下面这行: LoadModule php4_module /php/sapi/php4apache2.dll # 改成这一行: LoadModule php5_module /php/php5apache2.dll

如果 web 服务器是以 CGI 模式运行 PHP 的,应该注意 CGI 版本的名字从 php.exe 改为了 php-cgi.exe.在 Apache 中,应该照这样改:

实例: 移植 Apache 配置文件到 PHP 5,CGI 模式

# 将下面这行: Action application/x-httpd-php “/php/php.exe” # 改成这一行: Action application/x-httpd-php “/php/php-cgi.exe”

其它的 web 服务器中,需要修改 CGI 或者 ISAPI 模块的名字。

四、新函数

PHP 5 有了些新函数。下面是列表:

Arrays:

array_combine() - 用一个数组作为键名,另一个数组作为值创建一个新数组

array_diff_uassoc() - 计算数组的差别,并用用户提供的回调函数作附加的索引检查

array_udiff() - 用回调函数比较数据来计算数组的差别

array_udiff_assoc() - 计算数组的差别并作附加的索引检查。用回调函数来比较数据

array_udiff_uassoc() - 计算数组的差别并作附加的索引检查。数据的比较和索引检查都用回调函数来完成

array_walk_recursive() - 对数组的每个成员递归使用用户函数

array_uintersect_assoc() - 计算数组的交集并作附加的索引检查。用回调函数来比较数据

array_uintersect_uassoc() - 计算数组的交集并作附加的索引检查。数据和索引都用回调函数来比较

array_uintersect() - 计算数组的交集。用回调函数来比较数据

InterBase:

ibase_affected_rows() - 返回前一个查询影响到的行的数目

ibase_backup() - 在服务管理器中发起一个后台任务并立即返回

ibase_commit_ret() - 提交一个事务但不关闭

ibase_db_info() - 请求有关数据库的统计信息

ibase_drop_db() - 删除一个数据库

ibase_errcode() - 返回一个错误代码

ibase_free_event_handler() - 取消一个已注册的事件句柄

ibase_gen_id() - 递增指定的发生器并返回其新值v

php5向下兼容php4吗,PHP5与PHP4的区别小议相关推荐

  1. 谢华亮 php,谢华亮: PHP4和PHP5性能测试和对比

    PHP 4到今年年底PHP Group将不再对其进行支持了,所以为了让大家更有信心的转移到PHP 5平台上,我特别做了这个测试,看看我们PHP 4.x 是否真的性能比我们的PHP 5.x要好,测试结果 ...

  2. php4和php5的区别,php4和php5区别是什么

    php4和php5区别是什么 导语:PHP4和PHP5,已经是两个版本了.下面的是百分网小编为大家搜集的php4和php5区别,供大家参考. PHP5 中的对象已经进行了较系统.较全面的调整,现在的样 ...

  3. 让你的PHP4和PHP5共存

    来源:http://www.sudu.cn/info/html/edu/20071226/35135.html 一,本文涉及软件极其版本:  windows 2000 professional/xp  ...

  4. 让php4和php5共存的方法

    来源:http://blog.tianya.cn/blogger/post_show.asp?BlogID=327657&PostID=7220921 一山能容二虎―Windws下基于Apac ...

  5. PHP5比PHP4,php4和php5的配置异同比较

    技术文章 配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别.在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了:在windows配置则需 ...

  6. [Ubuntu] ubuntu13.04 从php5.4降级到php5.3

    ubuntu12.10以后,默认的deb安装库上面的php版本已经是5.4了,公司的项目使用5.4的时候,还是会出现很多问题,所以不得不降级安装5.3 顺便说一句,我原来的环境是nginx + php ...

  7. Centos7 把php5.4升级到php5.6

    2019独角兽企业重金招聘Python工程师标准>>> 使用Remi源可以方便对php进行升级(x64版本) Step1: 添加EPEL和Remi源 wget http://dl.f ...

  8. php 5.4 5.2区别,PHP5.5.2和php5.4.18发布

    PHP5.5.2和php5.4.18发布 PHP 5.5.2 PHP开发小组宣布发布.大约20个bug是修复,包括安全问题,OpenSSL中的模块和会话机制问题(CVE-2013-4248)(CVE- ...

  9. php5.5 zend optimizer,PHP5.3以上版本安装ZendOptimizer扩展

    搜索热词 <PHP5.3以上版本安装ZendOptimizer扩展>要点: 本文介绍了PHP5.3以上版本安装ZendOptimizer扩展,希望对您有用.如果有疑问,可以联系我们. PH ...

最新文章

  1. java 为什么有匿名类_全面了解Java中的内部类和匿名类
  2. 记录一下halcon例程报错和两个视觉库感兴趣区域绘制
  3. ZieglerNicholas PID GUI控制设计
  4. 从来没有一种技术是为了解决复用、灵活组合、定制开发的问题
  5. 南京工程学院 数据库复习(数据库系统概论复习 及 数据库原理与应用样题)
  6. python元胞自动机模拟交通_大师兄带你复现 -gt; 难度超高的二维CA元胞自动机模型...
  7. html登录界面设计代码_Python登录豆瓣并爬取影评
  8. mysql数据库引擎调优
  9. 批量替换 MySQL 指定字段中的字符串
  10. redis数据丢失_有效避免数据丢失!Redis持久化方案选择详解
  11. 防火墙阻止网页连接网络连接_win7电脑打不开网页怎么办 win7电脑打不开网页解决步骤【图文步骤】...
  12. Android 系统(191)---ODM 开发用户常见需求文档(九)
  13. c语言怎么确定输出数的坐标,c语言printf实现同一位置打印输出的实例
  14. CentOS 6.5安装配置Nginx
  15. 史密斯圆图串并联口诀_史密斯圆图的详解
  16. 第二届全球区块链峰会随记
  17. 软件视频会议系统 服务器要求,视频会议系统招标要求.docx
  18. python三引号的作用有哪些_Python中3种引号的作用与区别
  19. 服务器系统开机密码怎么关闭,windows server2012怎么去除开机密码
  20. python爬不同图片分别保存在不同文件夹中

热门文章

  1. C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?
  2. C#LeetCode刷题之#661-图片平滑器( Image Smoother)
  3. C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
  4. 面试官问面向对象特点_最好的面试官有什么共同点?
  5. OpenJDK内存错误
  6. jQuery高级部分笔记
  7. java项目打jar包的两种情况
  8. 漫步最优化十——极值类型
  9. ELMo代码详解(一):数据准备
  10. python读json文件太大github_GitHub上最火的开源项目是啥|JSON文件实战处理