PHP7新特性整理~~~~~~

**(轉載)**PHP7 已經出來了,這麼多好的特性,好的方法,爲什麼不使用呢,也希望PHP越來越好。
在這裏整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP5.5,PHP5.6 ,PHP7,PHP7.1 所有新特性,已備大家學習及使用
PHP5.1~PHP5.6 http://blog.csdn.net/fenglailea/article/details/9853645
PHP7~PHP7.1
http://blog.csdn.net/fenglailea/article/details/52717364
php中文網官方說明:http://www.php.cn/course/352.html

Buid-in web server內置了一個簡單的Web服務器
把當前目錄作爲Root Document只需要這條命令即可:

php -S localhost:3300
也可以指定其它路徑

php -S localhost:3300 -t /path/to/root
還可以指定路由

php -S localhost:3300 router.php
命名空間(php5.3)
命名空間的分隔符爲反斜杆\

namespace fox\lanmps\Table;
class Select {}
獲取完整類別名稱
PHP5.3 中引入命名空間的別名類和命名空間短版本的功能。雖然這並不適用於字符串類名稱

use Some\Deeply\Nested\Namespace\FooBar;
// does not work, because this will try to use the global FooBar class
$reflection = new ReflectionClass(‘FooBar’);
echo FooBar::class;
爲了解決這個問題採用新的FooBar::class語法,它返回類的完整類別名稱

命名空間 use 操作符開始支持函數和常量的導入
namespace Name\Space {
const FOO = 42;
function f() { echo FUNCTION.”\n”; }
}
namespace {
use const Name\Space\FOO;
use function Name\Space\f;

echo FOO."\n";  
f();  

}
輸出
42
Name\Space\f

Group use declarations
從同一 namespace 導入的類、函數和常量現在可以通過單個 use 語句 一次性導入了。

//PHP7之前
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// PHP7之後
use some\namespace{ClassA, ClassB, ClassC as C};
use function some\namespace{fn_a, fn_b, fn_c};
use const some\namespace{ConstA, ConstB, ConstC};
支持延遲靜態綁定
static關鍵字來引用當前類,即實現了延遲靜態綁定

class A {
public static function who() {
echo CLASS;
}
public static function test() {
static::who(); // 這裏實現了延遲的靜態綁定
}
}
class B extends A {
public static function who() {
echo CLASS;
}
}
B::test();
輸出結果:
B

支持goto語句
多數計算機程序設計語言中都支持無條件轉向語句goto,當程序執行到goto語句時,即轉向由goto語句中的標號指出的程序位置繼續執行。儘管goto語句有可能會導致程序流程不清晰,可讀性減弱,但在某些情況下具有其獨特的方便之處,例如中斷深度嵌套的循環和 if 語句。

goto a;
echo ‘Foo’;
a:
echo ‘Bar’;
for(i=0, j=50; i<100; i++) {
while(j–) {      if($j==17) goto end;    }  }  echo “i = i”;
end:
echo ‘j hit 17’;
支持閉包、Lambda/Anonymous函數
閉包(Closure)函數和Lambda函數的概念來自於函數編程領域。例如JavaScript 是支持閉包和 lambda 函數的最常見語言之一。
在PHP中,我們也可以通過create_function()在代碼運行時創建函數。但有一個問題:創建的函數僅在運行時才被編譯,而不與其它代碼同時被編譯成執行碼,因此我們無法使用類似APC這樣的執行碼緩存來提高代碼執行效率。
在PHP5.3中,我們可以使用Lambda/匿名函數來定義一些臨時使用(即用即棄型)的函數,以作爲array_map()/array_walk()等函數的回調函數。

echo preg_replace_callback(‘~-([a-z])~’, function (match)returnstrtoupper($match[1]);,helloworld);//helloWorld greet = function(name)printf(Hello; greet(‘World’);
greet(PHP);// callback = function (quantity, product) use (tax, & total) {
pricePerItem = constant(__CLASS__ . "::PRICE_" .  strtoupper( product));
total+=( pricePerItem * quantity)( tax + 1.0);
};
魔術方法__callStatic()和__invoke()
PHP中原本有一個魔術方法__call(),當代碼調用對象的某個不存在的方法時該魔術方法會被自動調用。新增的__callStatic()方法則只用於靜態類方法。當嘗試調用類中不存在的靜態方法時,__callStatic()魔術方法將被自動調用。

class MethodTest {
public function __call(name, arguments) {
// 參數 nameecho調 name’ ”
. implode(’ – ‘, $arguments). “\n”;
}
/* PHP 5.3.0 以上版本中本類方法有效 /
public static function __callStatic(name, arguments) {
// 參數 nameecho調 name’ ”
. implode(’ – ‘, $arguments). “\n”;
}
}

obj=newMethodTest; obj->runTest(‘通過對象調用’);
MethodTest::runTest(‘靜態調用’); // As of PHP 5.3.0
以上代碼執行後輸出如下:
調用對象方法’runTest’ –- 通過對象調用調用靜態方法’runTest’ –- 靜態調用
以函數形式來調用對象時,__invoke()方法將被自動調用。

class MethodTest {
public function __call(name, arguments) {
// 參數 nameechoCallingobjectmethod name’ ”
. implode(‘, ‘, $arguments). “\n”;
}

/**  PHP 5.3.0 以上版本中本類方法有效  */    
public static function __callStatic($name, $arguments) {    
    // 參數 $name 大小寫敏感    
    echo "Calling static method '$name' "    
         . implode(', ', $arguments). "\n";    
}    

}
obj=newMethodTest; obj->runTest(‘in object context’);
MethodTest::runTest(‘in static context’); // As of PHP 5.3.0
Nowdoc語法
用法和Heredoc類似,但使用單引號。Heredoc則需要通過使用雙引號來聲明。
Nowdoc中不會做任何變量解析,非常適合於傳遞一段PHP代碼。

// Nowdoc 單引號 PHP 5.3之後支持
name=MyName;echo<<<EOTMynameis name”.
EOT;
//上面代碼輸出 My name is “$name”. ((其中變量不被解析)
// Heredoc不加引號
echo <<

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章