PHP5各个版本的新功能和新特性总结
本文目錄:
PHP5.2 以前:autoload, PDO 和 MySQLi, 類型約束
PHP5.2:JSON 支持
PHP5.3:棄用的功能,匿名函數(shù),新增魔術(shù)方法,命名空間,后期靜態(tài)綁定,Heredoc 和 Nowdoc, const, 三元運(yùn)算符,Phar
PHP5.4:Short Open Tag, 數(shù)組簡寫形式,Traits, 內(nèi)置 Web 服務(wù)器,細(xì)節(jié)修改
PHP5.5:yield, list() 用于 foreach, 細(xì)節(jié)修改
PHP5.6: 常量增強(qiáng),可變函數(shù)參數(shù),命名空間增強(qiáng)
一、PHP5.2以前(2006前)
順便介紹一下 PHP5.2 已經(jīng)出現(xiàn)但值得介紹的特征。
autoload
大家可能都知道 __autoload() 函數(shù),如果定義了該函數(shù),那么當(dāng)在代碼中使用一個(gè)未定義的類的時(shí)候,該函數(shù)就會(huì)被調(diào)用,你可以在該函數(shù)中加載相應(yīng)的類實(shí)現(xiàn)文件,如:
但該函數(shù)已經(jīng)不被建議使用,原因是一個(gè)項(xiàng)目中僅能有一個(gè)這樣的 __autoload() 函數(shù),因?yàn)?PHP 不允許函數(shù)重名。但當(dāng)你使用一些類庫的時(shí)候,難免會(huì)出現(xiàn)多個(gè) autoload 函數(shù)的需要,于是 spl_autoload_register() 取而代之:
spl_autoload_register(function($classname) {require_once("{$classname}.php") });spl_autoload_register() 會(huì)將一個(gè)函數(shù)注冊到 autoload 函數(shù)列表中,當(dāng)出現(xiàn)未定義的類的時(shí)候,SPL [注] 會(huì)按照注冊的倒序逐個(gè)調(diào)用被注冊的 autoload 函數(shù),這意味著你可以使用 spl_autoload_register() 注冊多個(gè) autoload 函數(shù).
注:SPL: Standard PHP Library, 標(biāo)準(zhǔn) PHP 庫, 被設(shè)計(jì)用來解決一些經(jīng)典問題(如數(shù)據(jù)結(jié)構(gòu)).
PDO 和 MySQLi
即 PHP Data Object, PHP 數(shù)據(jù)對(duì)象,這是 PHP 的新式數(shù)據(jù)庫訪問接口。
按照傳統(tǒng)的風(fēng)格,訪問 MySQL 數(shù)據(jù)庫應(yīng)該是這樣子:
為了能夠讓代碼實(shí)現(xiàn)數(shù)據(jù)庫無關(guān),即一段代碼同時(shí)適用于多種數(shù)據(jù)庫(例如以上代碼僅僅適用于MySQL),PHP 官方設(shè)計(jì)了 PDO.
除此之外,PDO 還提供了更多功能,比如:
1.面向?qū)ο箫L(fēng)格的接口
2.SQL預(yù)編譯(prepare), 占位符語法
3.更高的執(zhí)行效率,作為官方推薦,有特別的性能優(yōu)化
4.支持大部分SQL數(shù)據(jù)庫,更換數(shù)據(jù)庫無需改動(dòng)代碼
上面的代碼用 PDO 實(shí)現(xiàn)將會(huì)是這樣:
// 連接到數(shù)據(jù)庫 $conn = new PDO("mysql:host=localhost;dbname=database", "user", "password");// 預(yù)編譯SQL, 綁定參數(shù) $query = $conn->prepare("SELECT * FROM `table` WHERE `type` = :type"); $query->bindParam("type", $_POST['type']);// 執(zhí)行查詢并打印結(jié)果 foreach($query->execute() as $row) {foreach($row as $k => $v)print "{$k}: {$v}\n"; }PDO 是官方推薦的,更為通用的數(shù)據(jù)庫訪問方式,如果你沒有特殊需求,那么你最好學(xué)習(xí)和使用 PDO.
但如果你需要使用 MySQL 所特有的高級(jí)功能,那么你可能需要嘗試一下 MySQLi, 因?yàn)?PDO 為了能夠同時(shí)在多種數(shù)據(jù)庫上使用,不會(huì)包含那些 MySQL 獨(dú)有的功能。
MySQLi 是 MySQL 的增強(qiáng)接口,同時(shí)提供面向過程和面向?qū)ο蠼涌?#xff0c;也是目前推薦的 MySQL 驅(qū)動(dòng),舊的C風(fēng)格 MySQL 接口將會(huì)在今后被默認(rèn)關(guān)閉。
MySQLi 的用法和以上兩段代碼相比,沒有太多新概念,在此不再給出示例,可以參見 PHP 官網(wǎng)文檔 [注]。
注:http://www.php.net/manual/en/mysqli.quickstart.php
類型約束
通過類型約束可以限制參數(shù)的類型,不過這一機(jī)制并不完善,目前僅適用于類和 callable(可執(zhí)行類型) 以及 array(數(shù)組), 不適用于 string 和 int.
// 限制第一個(gè)參數(shù)為 MyClass, 第二個(gè)參數(shù)為可執(zhí)行類型,第三個(gè)參數(shù)為數(shù)組 function MyFunction(MyClass $a, callable $b, array $c) {// ... }原文地址:http://www.jb51.net/article/48150.htm
轉(zhuǎn)載于:https://www.cnblogs.com/phpfans/p/4306322.html
總結(jié)
以上是生活随笔為你收集整理的PHP5各个版本的新功能和新特性总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。