PHP 5.4正式版重要新特性解決思路
來源:互聯網
上載者:User
PHP 5.4正式版重要新特性
口水文章,文章裡有的地方還沒寫完整.大家跟我一起將就的看看吧..
目前php的最新版本已經是5.41
=========================================================
PHP一直是在Web開發領域中十分重要而快捷方便的開發語言,深受廣大開發人員的青睞。現在PHP 5.4的正式版本已經發布,其中增加了大量新的特性,官方聲稱效能提高20%,並且佔用更少的資源。在本文中,我將帶領大家學習PHP 5.4的一些新的特性。
在PHP 5.4中,首先是修複了多達100多處的bug,並且在記憶體及效能最佳化上做的更好了,而且去掉了一些之前版本的方法,比如register_globals,magic_quotes,safe_mode等,而且要注意的是,PHP 5.4中,預設的編碼方式已經改變為了,這很有利於開發人員開發多語言的版本應用。
Traits介紹
首先來介紹下PHP 5.4中新加入的功能Traits。其實該功能在其他語言中也見到其蹤影,這裡可以簡單理解為一系列的方法的集合,在組織圖上跟類有點象(但不能象類那樣執行個體化),能讓開發人員可以在不同的類中重用這組方法。由於php是單繼承的語言,所以一個類中是不能同時繼承多個類的。這個時候,Traits就派上用場了。
Traits是一個方案集合,它不屬於任何實際類。使用者沒法建立Trait執行個體或直接調用Trait中的方法,相反,使用者必須將Traits合并到實際的類當中方能使用它們。在優先順序方面,Trait方法會覆蓋繼承而來的同名方法,而當前合并類中的同名方法則會覆蓋Trait方法。
下面舉個例子來說明Traits的用途。假設我們正在構建的網站中,需要同時調用Facebook和Twitter的API,而在這兩個API的調用過程中,都需要調用curl方法進行一系列的操作,獲得兩者API介面返回的內容,為了不在這兩個類中重複編寫相同的方法,可以使用php 5.4中的Traits實現,如下代碼所示:
/** cURL wrapper trait */
trait cURL
public function curl($url)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
/** Twitter API 類 */
class Twitter_API
use cURL; //調用Traits
public function get($url)
return json_decode($this->curl("http://api.twitter.com/".$url));
/** Facebook API 類 */
class Facebook_API
use cURL; //調用Traits
public function get($url)
return json_decode($this->curl("http://graph.facebook.com/".$url));
$facebook = new Facebook_API();
echo $facebook->get("name; //這裡會調用API輸出該facebook的使用者名稱
/** 示範php 5.4中的新特性 */
echo (new Facebook_API)->get("name;
$foo = "get";
echo (new Facebook_API)->$foo("name;
echo (new Twitter_API)->get("name;
在上面的代碼中,首先通過關鍵字trait定義了一個功能集合,其名稱為Curl,其中包含一個方法名為curl,該方法中是根據url的參數值,調用php內建的cur方法返回該url對應的頁面輸出內容。然後在Twitter_API類和Facebook_API
類中,分別使用use cURL去調用了這個Traits,並且在各自的get方法中,都調用了Traits中的的curl方法。
注意在上面的代碼中,我們除了用new Facebook_API()來產生facebook對象的執行個體外,還示範了使用php 5.4中新的特性,即:
可以在執行個體化時訪問類成員,即:
echo (new Facebook_API)->get("name;
$foo = "get";
echo (new Facebook_API)->$foo("name;
看到了麼?其中對$foo變數賦值為get,然後在類中企圖調用get方法時,是通過(new Facebook_API)->$foo("500058753")->name;去實現調用的。
我們再舉個例子來說明下Traits的使用,可能這個例子更加簡單,比如如下代碼:
trait Net
public function net()
return "Net";
trait Tuts
public function tuts()
return "Tuts";
class NetTuts
use Net, Tuts;
public function plus()
return "+";
$o = new NetTuts;
echo $o->net(), $o->tuts(), $o->plus();
echo (new NetTuts)->net(), (new NetTuts)->tuts(), (new NetTuts)->plus();
以上的結果都輸出NetTuts。此外,順便說下,在php 5.4中traits的魔術常量為__TRAIT__。
內建的調試伺服器
在以往的php 開發中,一般是需要跟如Apache HTTP Server進行配合開發的。在php 5.4中,新內建了一個簡單的Web伺服器,以方便開發人員不用通過複雜的配置也可以完成開發工作。下面分步驟講解下如何在windows環境下,使用php 5.4中的內建伺服器完成相關工作。
步驟1) 首先在c盤根目錄下建立一個目錄,為public_html,並且在檔案中建立一個router.php檔案,代碼如下:
php
// router.php
if (preg_match("#\.php$#", $_SERVER["REQUEST_URI"]))
require basename($_SERVER["REQUEST_URI"]); // serve php file
else if (strpos($_SERVER["REQUEST_URI"], ".") !== false)
return false; // serve file as-is
>
然後再建立一個簡單的PHP檔案,名字為index.php,如下:
// index.php
echo "Hello Nettuts+ Readers!";