php5.3/5.4/5.5/5.6/7常見新增特性彙總整理
本文例項總結了php5.3/5.4/5.5/5.6/7新增特性。分享給大家供大家參考,具體如下:
php新增的特性,只是略微整理,並不完全。
一、php5.3新增的新特性
1、?:簡化的三元運算子
<?php $cur = $cur ? $cur : 1; $cur = $cur ?: 1;
2、匿名函式
<?php $test = function() { echo 'test'; }; $test(); $arr = array(1,2,3,4,5); $arr = array_map(function($n) { return $n * 2; },$arr); print_r($arr);
3、名稱空間
<?php namespace Test; class Person { public function say() { echo 'hello'; } } $p = new \Test\Person(); $p->say();
4、支援延遲靜態繫結
<?php class A { public static function who() { echo __CLASS__; } public static function test() { //self::who(); //static來引用當前的類,這裡呼叫的是B類的靜態方法who static::who(); } } class B extends A { public static function who() { echo __CLASS__; } } //B類呼叫繼承於A的靜態方法test,但該方法中self已經綁定了A類,所以呼叫的是父類的who方法。 //而新增的static則引用當前類,呼叫的則是本類的who方法。 B::test();
5、支援goto語句
<?php for($i = 0; $i < 100; ++$i) { if($i == 50) { goto end; } } end : echo $i;
6、新增兩個魔術方法__callStatic()和__invoke()
<?php class A { public static function __callStatic($name,$arguments) { echo '你呼叫了不存在的靜態方法:',$name; } public function __invoke($i) { echo '你把物件當函式呼叫了,還傳了個值:',$i; } } A::xxx(); $a = new A(); $a(6);
7、新增nowdoc語法
<?php $name = 'test'; //nowdoc使用單引號,內容不做變數解析 $a = <<< 'TEST' 測試$name TEST; //heredoc不加引號或加雙引號,內容做變數解析 $b = <<< TEST 測試$name TEST; echo $a; echo $b;
8、類外也可用const定義常量
<?php const PI = 3.14;
9、http狀態碼在200-399範圍內均被認為訪問成功。
10、支援動態呼叫靜態方法
<?php class A { public static function test() { echo 'test'; } } $cName = 'A'; $mName = 'test'; $cName::$mName();
二、php5.4新增的特性
1、內建一個簡單的Web伺服器
2、陣列的簡化寫法
<?php $arr = array(1,3); $arr = array('a' => 1,'b' => 2); $arr = [1,3]; $arr = ['a' => 1,'b' => 2];
3、新增支援對函式返回陣列的成員訪問解析
<?php function getArr() { return array(1,5); } echo getArr()[2];
4、新增例項化時訪問類成員
<?php class A { public function test() { echo 'test'; } } (new A())->test();
5、新增對短標籤的支援,無論是否設定short_open_tag。
6、session提供上傳進度支援,$_SESSION['upload_progress_name']。
7、新增加了$_SERVER['REQUEST_TIME_FLOAT'],用來統計服務請求時間。
8、預設使用mysqlnd,mysqli,pdo預設使用mysqlnd本地庫。
9、讓json更懂中文
<?php $arr = array( 'name' => '哈哈','age' => 25,); echo json_encode($arr,JSON_UNESCAPED_UNICODE);
10、新增二進位制直接量
<?php $bin = 0b101; echo $bin;
11、預設default_charset從ISO-8859-1已經變為UTF-8
12、新增Traits
<?php trait A { public function fly() { echo '會飛'; } } trait B { public function swim() { echo '游泳'; } } class People { use A,B; } (new People())->fly();
三、php5.5新增的特性
1、empty支援傳入一個任意表達式,不僅是一個變數
<?php var_dump(empty(3 * 3)); function test() { return false; } var_dump(empty(test()));
2、新增密碼雜湊API,password_hash
3、新增生成器
<?php $arr = function() { for($i = 0; $i < 10; ++$i) { //變數$i的值在不同的yield之間是保持傳遞的 yield $i; } }; $data = $arr(); foreach($data as $v) { echo $v; }
4、新增finally關鍵字
<?php try { throw new Exception('我是異常'); } catch(Exception $e) { echo $e->getMessage(); } finally { echo 'finally'; }
5、新增boolval()函式
6、新增array_column()函式
<?php $arr = array( array('name' => 'test1','age' => 22),array('name' => 'test2','age' => 23),array('name' => 'test3','age' => 24),); //取出name列 print_r(array_column($arr,'name')); //取出name列,並用age作鍵 print_r(array_column($arr,'name','age'));
7、foreach支援list()
<?php $arr = [ [3,3],[4,4],[5,5],]; foreach($arr as list($a,$b)) { echo $a,'-',$b,'<br>'; }
8、增加了opcache擴充套件
四、php5.6新增的特性
1、可以使用表示式定義常量
<?php const ONE = 1 * 1; class A { const TWO = 1 * 2; const THREE = self::TWO + 1; public function test($i = self::THREE + ONE) { echo $i; } } (new A())->test();
2、使用...定義變長函式引數
<?php function total(...$nums) { $total = 0; foreach($nums as $num) { $total += $num; } return $total; } echo total(1,5); $arr = [3,5,6]; echo total(...$arr);
3、使用**進行冪運算
<?php echo 2 ** 4; $a = 2; $a **= 4; echo $a;
4、use function和use const
<?php namespace A { const PI = 3.14; function test() { echo 'test'; } } namespace B { use function \A\test; use const \A\PI; echo PI; test(); }
5、加入hash_equals()函式,以恆定的時間消耗來進行字串比較,以避免時序攻擊。
6、加入__debugInfo()
當使用var_dump()輸出物件的時候,可以用來控制要輸出的屬性和值。
<?php class A { protected $a = 1; protected $b = 2; protected $c = 3; public function __debugInfo() { //返回值必須是陣列 return array( 'a' => $this->a,); } } var_dump((new A()));
五、php7新增的特性
1、??運算子(NULL合併運算子)
<?php $page = $_GET['page'] ?? 1;
2、標量型別宣告
3、函式返回值型別宣告
<?php declare(strict_types=1); function add(int $num1,int $num2) : int { return $num1 + $num2; } echo add(2,3); //在嚴格模式下,下面這行會報錯 echo add(2.0,3.0);
4、匿名類
<?php (new class { public function test() { echo 'test'; } })->test();
5、通過define()定義常量陣列
<?php define('ARR',['a','b','c']); echo ARR[2];
更多關於PHP相關內容感興趣的讀者可檢視本站專題:《php面向物件程式設計入門教程》、《PHP陣列(Array)操作技巧大全》、《PHP基本語法入門教程》、《PHP運算與運算子用法總結》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家PHP程式設計有所幫助。