搜尋
首頁後端開發php教程PHP 5.4正式版重要新特性

PHP一直是在Web開發領域中十分重要且快速方便的開發語言,深受廣大開發人員的青睞。現在PHP 5.4的正式版本已經發布,其中增加了大量新的特性,官方聲稱性能提高20%,並且佔用更少的資源。在本文中,我將帶領大家學習PHP 5.4的一些新的特性。

  在PHP 5.4中,首先是修復了多達100多處的bug,並且在內存及性能優化上做的更好了,而且去掉了一些之前版本的方法,比如register_globals,magic_quotes,safe_mode等,而且要注意的是,PHP 5.4中,預設的編碼方式已經改變為UTF-8了,這很有利於開發者開發多語言的版本應用。 

  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 包裝特徵*/ 

  trait cURL 
 柯) 

  { 

  $ch = curl_init(); 

  curl_setopt($ch, CURLOPT_URL, $url); 1); 

  $output = curl_exec($ch); 

  curl_close($ch); 

  return $output; 

  } 


  { 

  use cURL; //呼叫Traits 

  public function get ($url) 

  { 

  return json_decode($this->curl('http://api.twitter.com/'.$url)); 『 & */ 

  class Facebook_API 

  { 

  use cURL; //呼叫Traits 
)
  public fLunction get(craits 🎀) return json_decode($this->curl('http://graph.facebook. com/'.$url)); 

  } 

  } 

  $facebook = new Facebook_API(); 

  $facebook =。 facebook的使用者名稱 

  /**Twitter API 類*/ 

  echo (new Facebook_API)->get('500058753')->name; 🎀 >$foo('500058753')->name; 

  echo (new Twitter_API)->get('1/users/show.json?screen_name=rasmus')->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('500058753')->name; 

  $foo = 'get'; 

  echo (new Facebook_API)-0$oo(
 〜.5


  看到了麼?其中對$foo變數賦值為get,然後在類別中企圖呼叫get方法時,是透過(new Facebook_API)->$foo('500058753')->name;去實現呼叫的。 

我們再舉個例子來說明下Traits的使用,可能這個例子比較簡單,例如以下程式碼: 

 trait Net 

  { 



  } 

  } 

  trait Tuts 

  { 

  public function t   } 

  } 

  class NetTuts 

  { 

  use TutsSuts; plus() 

  { 

  return '+'; 

  } 
 < >net(), $o->tuts(), $o-> plus(); 

  echo (new NetTuts)->net(), (new NetTuts)->tuts(), (new NetTuts)->plus(); 



uts〜uts都是以上的結果都輸出。此外,順便說下,在php 5.4中traits的魔術常數為__TRAIT__。 

  內建的調試伺服器 

  在以往的php 開發中,一般是需要跟如Apache HTTP Server進行配合開發的。在php 5.4中,新內建了一個簡單的Web伺服器,以方便開發者不用透過複雜的設定也可以完成開發工作。以下分步驟說明如何在windows環境下,使用php 5.4中的內建伺服器完成相關工作。

  步驟1) 首先在c盤根目錄下建立一個目錄,為public_html,並且在檔案中建立一個router.php文件,程式碼如下: 

// router.php 
if (// router.php 
if (pregmatch(' #.php$#', $_SERVER['REQUEST_URI'])) 

require basename($_SERVER['REQUEST_URI']); // serve php file 

else if (strpos)(QUE_DVERRIS]RIE(D:D:E:(D)」 ], '.') !== false) 

return false; // serve file as-is 

?> 





 如下: 

 // index.php 

  echo 'Hello Nettuts+ Readers!'; 

  ?> 
ude.
include_path = ".;C:phpPEAR;C:public_html" 



  步驟2 運行內建的web伺服器 

  首先進行命令列模式下,並且進入php目錄,輸入如下指令: 
8080 -t C:public_html router.php 
  其中這裡指定了任何機器都可以訪問這台伺服器,並且指定了8080端口,指定了工作監聽的路由文件為c:public_html下的router,php文件,在上面的命令列輸入後按回車,會出現以下資訊提示 

  則證明內建的伺服器已經正確啟動了。 

  這時候,可以在瀏覽器中輸入http://localhost:8080/index.php進行存取了。

  較簡潔的陣列語法 

  在php 5.4中,對一些語法上的支援更顯得簡潔,例如陣列中的聲明,現在 

  uit ('apples', 'oranges', 'bananas'); // 舊的陳述方式 

  $fruits = ['apples', 'oranges', 'bananas']; //php 5.4中新的支援宣告方式
  // 新的關聯數組訪問 

  $array = [ 

  'foo' => 'bar', 
 〜、〜];


  當然,在php 5.4中,同樣支援舊的數組聲明方式。 

  直接對函數回傳值進行陣列取值 

  在php 5.4中,支援直接對函數回傳值進行陣列取值。看個例子,例如: 

 $tmp = explode(' ', 'Alan Mathison Turing'); 

  echo $tmp[1]; // Mathison 

   上面的字串中的Mathison的話,必須先用explode函數先傳回相關的值,然後再對陣列進行取值。而在php 5.4中,可以直接對回傳值進行陣列取值,如下: 

echo explode(' ', 'Alan Mathison Turing')[1]; 
  這樣就方便多了。再例如,加入要得到上面這個字串的最後一個字串部分Turing,在php 5.4中可以這樣做: 

echo end(explode(' ', 'Alan Mathison Turing')); 
  再給出一個複雜點的例子,如下: 

function foobar() 

  { 

  return ['foo' => ['bar' => 'Hello']]; 

 } oo'o'ooo'of'barooo'of'bar's[ooo];輸出Hello 




  閉包中能使用$this指針 

  以前的php 版本中,是不能在匿名方法中(也稱為閉包)使用$this指針的,而php 5.4中是不能在匿名方法中(也可以了範例如下: 

class Foo 

  { 

  function hello() { 

  echo〜 Nettuts!'; onymous() 

  { 

  return function() { 

  $this- >hello(); //這在先前的版本中是不能實現 

  }; 

  } 

  } __construct(Foo $o) 

  { 

  $x = $o->anonymous(); // 實際上呼叫Foo::hello() 

  $x(); // 執行的是Foo::hello() 

  } 🎀 ); //輸出Hello Nettuts! 

  以上的實作方法有點複雜,在php 5.4中,可以更方便寫為如下: 

  function anonymous(
  return function () use ($that) { 

  $that->hello(); 

  }; 

  } 
㟎中的short_tag標記如何設置,在模板中可以隨時使用這樣的方式了,從而代替這樣的方式。採用「0b」字首標識二進制數,現在,如果要使用二進制數,請在前面加上0b的前綴,例如: 

  echo 0b11111 

  函數類型提示的增強型 %在php 5.0後,引入了函數類型提示的功能,其意義為對於傳入函數中的參數都進行型別檢查,舉個例子,有以下的類別: 

 class bar { 

  } 
bar $foo) { 

  } 

  其中函數foo中的參數規定了傳入的參數必須為bar類別的實例,否則系統會判斷出錯。同樣對陣列來說,也可以進行判斷,例如: 

 function foo(array $foo) { 

  } 

  foo(array(1, 2, 3)); // 2, 3); // 2, 3));

  foo(123); // 不正確,傳入的不是數組 




   而在php 5.4中,則支援對callable類型的支援。在以前, 我們如果希望一個函數接受一個回調函數作為參數, 那需要做很多額外的工作來檢查是否是可調用的正確的回調函數,例子如下: 

 function foo(callable $callback) { 

  }

  則: 



  則: 



  foo("false"); //錯誤,因為false不是callable類型 

『foo("printfuncfoo("printf

  class A { 

  static function show() { 

  } 

 〜)

  遺憾的是,PHP 5.4中,依然不支援對基本類型如字符,整形等的類型提示。

  對時間統計的增強 

  在PHP 5.4中,其中新增加了$_SERVER['REQUEST_TIME_FLOAT'],這個是用來統計服務請求時間的,並用ms來表示,大大方便了開發者,例如: 
  echo '腳本執行時間', round(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'], 2), 's'; 

  皮看到PHP 5.4中比較明顯的特性改進主要是Traits以及內建調試伺服器,UTF-8預設支援等,詳細的新特性介紹請參考PHP 5.4的使用手冊。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP記錄:PHP日誌分析的最佳實踐PHP記錄:PHP日誌分析的最佳實踐Mar 10, 2025 pm 02:32 PM

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

在Laravel中使用Flash會話數據在Laravel中使用Flash會話數據Mar 12, 2025 pm 05:08 PM

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

php中的捲曲:如何在REST API中使用PHP捲曲擴展php中的捲曲:如何在REST API中使用PHP捲曲擴展Mar 14, 2025 am 11:42 AM

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

簡化的HTTP響應在Laravel測試中模擬了簡化的HTTP響應在Laravel測試中模擬了Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

在Codecanyon上的12個最佳PHP聊天腳本在Codecanyon上的12個最佳PHP聊天腳本Mar 13, 2025 pm 12:08 PM

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

解釋PHP中晚期靜態結合的概念。解釋PHP中晚期靜態結合的概念。Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

自定義/擴展框架:如何添加自定義功能。自定義/擴展框架:如何添加自定義功能。Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具