php4与php5的区别小结(配置异同)
前端之家收集整理的这篇文章主要介绍了
php4与php5的区别小结(配置异同),
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP4 没有 静态成员 PHP网页后台出现这样的错误,查过SubPages1.PHP并没有找到相应的错误。网站在自己本地测试完全正常,传到空间以后就出现这样的错误。连验证码都看不到了,类似的错误还有Parse error: Syntax error,unexpected T_STRING,expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /www/users/myhuashun.com.ufhost/admin/yanzhengma.PHP on line 6 服务器是4.0版本的话 如果有“public”,就将“public”去掉。就不会出错,如果“public” 是定义变量的话,将“public” 改为“var”。 最近在做一个整站内容管理系统(见本站首页),另外还在做一个朋友的办公楼信息管理系统!老实说才用PHP进行开发半年多一点,经验很不足,不 过从事WEB的工龄也足足好几年了。最初接触PHP的时候还是PHP3,PHP3不支持session,也没有面象对象的概念,只有一大堆的函数!最初也 是在诸多web脚本中徘徊,asp,PHP,jsp已经是三足顶立了,当然perl,cgi对于那时还是初学者的学生来说太奢侈了。其实那时候也很喜欢那 一大堆的函数,就像当时学习dos的命令一样,但是比起asp来说PHP3没有session,没有面象对象,而众多小公司都在使用asp是最初不选择 PHP的原因,而PHP4最大的进步就是加入了面象对象的思想,增加了服务器与客户机之间的会话管理。现在国内大多的主机提供商都还停留在PHP4版本 上,但是PHP5可以说才算得上真正意义的有点模样的语言! 所以,重回PHP就是用PHP5进行开发,在我的机器上没有安装过PHP4的版本,但是在主机上却是PHP4的版本,所以开发过程中,我不得不小心翼翼,认真的了解他们之间的特性。 1、PHP4没有static,private,protect等修饰,所以开发出来的程序上传到主机上得把所有这些去掉! 2、PHP4中对像调用不能写成 $obj->method_a()->method_b();而PHP5可以,这句语句的意思就是调用$obj的method_a()方法,会返回一个对象,再执行对象的method_b()方法。
那么我上传到我的主机上,我就得把所有这样的语句改成
<div class="codetitle"><a style="CURSOR: pointer" data="48785" class="copybut" id="copybut48785" onclick="doCopy('code48785')"> 代码如下:
<div class="codebody" id="code48785">
$tempobj=$obj->method_a();
$tempobj->method_b();
3、复杂字符串中变量解析中
PHP5中可以解析对象的
方法属性等,如: $a="{$db->isconnected}";
而
PHP4不能正确运行。
4、
PHP5中可以用构造和析构魔术
函数如:
<div class="codetitle">
@L_404_1@ 代码如下: <div class="codebody" id="code
40499">
<?
PHP class MyDestructableClass {
function
construct() {
print "In constructor\n";
$this->name = "MyDestructableClass";
} function destruct() {
print "Destroying " . $this->name . "\n";
}
} $obj = new MyDestructableClass();
?>
而
PHP4中没有,只有与类名同名的
函数就是构造
函数,而且对与类名同名的构造
函数。
PHP5在
PHP4上还
增加了很多,如pdo等,
PHP6可能做了更多的扩展(现在还没有试用
PHP6),想
PHP会越来强大,越来越适合基于WEB的开发。
一、未100%向下兼容
在
PHP5中尽管大部分
PHP4的
代码应该不用
修改就能运行,还是应该留意以下不向下兼容的改变:
有了一些新关键字。
strrpos() 和 strripos()如今使用整个字符串作为 needle。
非法使用字符串偏移量会导致 E_ERROR 而不是 E_WARNING。一个非法使用的例子:$str = ‘abc'; unset($str[0]);.
array_merge() 被改成只接受数组。如果传递入非数组变量,对每个此类参数都会发出一条 E_WARNING 信息。要小心因为你的
代码有可能疯狂发出 E_WARNING。
PATH_TRANSLATED 服务器变量在 Apache2 SAPI 中不再暗中设定,这和
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
<div class="codetitle">
<a style="CURSOR: pointer" data="18472" class="copybut" id="copybut18472" onclick="doCopy('code18472')"> 代码如下: