首頁 php教程 php手册 PHP 5.0 的变化与PHP 6.0 展望

PHP 5.0 的变化与PHP 6.0 展望

Jun 21, 2016 am 08:59 AM
ext mysql php var

  目前,大多数PHP安装还是使用PHP 4.x版本。实际上,PHP 5.0已经出台一段时间了,而如今PHP 5.1.1也刚刚发行。如果你还没有升级到这些新版本,那么让我们一同看一下在新版的PHP中的变化,并在最后讨论对于PHP 6所期望的特性。

  一、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中要作的改变

  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所做出的贡献已得到业界的充分认可,其前途是一片光明的。



本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
session_start()函數的意義是什麼? session_start()函數的意義是什麼? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

MySQL與Oracle:了解許可和成本 MySQL與Oracle:了解許可和成本 May 03, 2025 am 12:19 AM

MySQL採用GPL和商業許可,適合小型和開源項目;Oracle採用商業許可,適合需要高性能的企業。 MySQL的GPL許可免費,商業許可需付費;Oracle許可費用按處理器或用戶計算,成本較高。

MySQL與PhpMyAdmin:了解關鍵差異 MySQL與PhpMyAdmin:了解關鍵差異 May 06, 2025 am 12:17 AM

MySQL是數據庫管理系統,phpMyAdmin是管理MySQL的Web工具。 1.MySQL用於存儲和管理數據,支持SQL操作。 2.phpMyAdmin提供圖形界面,簡化數據庫管理。

Navicat和Mysql:完美的合作夥伴關係 Navicat和Mysql:完美的合作夥伴關係 May 05, 2025 am 12:09 AM

Navicat和MySQL是絕配,因為它們能提高數據庫管理和開發效率。 1.Navicat簡化了MySQL的操作,通過圖形界面和自動生成SQL語句提升工作效率。 2.Navicat支持多種連接方式,方便本地和遠程管理。 3.它提供了強大的數據遷移和同步功能,適合高級用法。 4.Navicat有助於性能優化和最佳實踐,如定期備份和查詢優化。

PHP性能優化策略。 PHP性能優化策略。 May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

MySQL:SQL的實際應用 MySQL:SQL的實際應用 May 08, 2025 am 12:12 AM

MySQL受歡迎的原因是其性能卓越且易於使用和維護。 1.創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2.插入和查詢數據:通過INSERTINTO和SELECT語句操作數據。 3.優化查詢:使用索引和EXPLAIN語句提升性能。

MySQL與Oracle:許可,功能和福利 MySQL與Oracle:許可,功能和福利 May 08, 2025 am 12:05 AM

MySQL和Oracle的主要區別在於許可證、功能和優勢。 1.許可證:MySQL提供GPL許可證,免費使用,Oracle採用專有許可證,價格昂貴。 2.功能:MySQL功能簡單,適合Web應用和中小型企業,Oracle功能強大,適合大規模數據和復雜業務。 3.優勢:MySQL開源免費,適合初創公司,Oracle性能可靠,適合大型企業。

PHP中依賴注入的最佳實踐 PHP中依賴注入的最佳實踐 May 08, 2025 am 12:21 AM

使用依賴注入(DI)的原因是它促進了代碼的松耦合、可測試性和可維護性。 1)使用構造函數注入依賴,2)避免使用服務定位器,3)利用依賴注入容器管理依賴,4)通過注入依賴提高測試性,5)避免過度注入依賴,6)考慮DI對性能的影響。

See all articles