PHP7新特性的介紹

2021-08-03 06:09:25 字數 3659 閱讀 7241

大小從24位元組減少到16位元組

hashtable大小從72位元組減少到56位元組

hashtable bucket大小從72位元組減少到32位元組

php5:45m

php7:10m

call_user_function(_array)=>zend_init_user_call

is_intis_stringis_array、... =>zend_type_check

strlen=>zend_strlen

defined=>zend+defined

php5(zend_qsort

快速排序(非穩定排序)

array(1 => 0, 0 => 0)

php7(zend_sort

快速排序+選擇排序(穩定排序)

array(0 => 0, 1 => 0)

小於16個元素的使用選擇排序,大於16個按照16個為單位去分割,分別使用選擇排序,然後再全部合起來使用快速排序。排序較之前相比,內部元素由非穩定排序變成穩定排序,減少元素的交換次數,減少對記憶體的操作次數,效能提公升40%

假如現在我們有這樣的需求,要對php原始檔就行語法檢測,實現編碼規範。php5之前的話,沒有ast,直接從parser就生成了opcodes!就需要借助一些外部的php語法解析器來實現;而php7增加了ast,我們可以自己去實現這樣乙個擴充套件,利用擴充套件提供的函式可以直接獲取檔案對應的的ast結構,而這樣的結構正是我們可以識別的,所以就可以在這個基礎上去做一些優化和判斷了。

$$foo['bar']['baz'] 

php5:$

php7:($$foo)[『bar』][『baz']【從左至右法則】

(function() {})();

$foo()();

[$obj, 'method']();

class a

}[new a, 'a1']();

$f = function() ; class f  $f->call(new f); 

function getanonymousclass($config) ; } p(getanonymousclass(array())); 

//php5

$a = array(1, 2, 3);foreach ($a as $v) int(2) int(2) int(2) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v) int(2) int(3) bool(false) $a = array(1, 2, 3);$b=$a;foreach ($a as $v) int(1) int(1) int(1) //php7:不再運算元據的內部指標了 $a = array(1, 2, 3);foreach ($a as $v) int(1) int(1) int(1) $a = array(1, 2, 3);$b=&$a;foreach ($a as $v) int(1) int(1) int(1)

<=>

//php5

function compare($a, $b) //php7 function compare($a, $b)

**

2 ** 2; // 2 * 2 = 4

2 ** -1; // 1 / 2 = 0.5 3 ** -2; // 1 / 9 = 0.111111111

??

$a = null;

$b = 1; $c = 2; echo $a ?? $b , 『,』 , $c ?? $b; // 1,2 echo $a ?? $b ?? $c , 『,』 , $a ?? $d ?? $c; // 1,2

\u

echo "\u";//你

echo "\u";//新 // 從右至左強制 echo"\uiabgnay\u";; ? yangbai

function getint() : int ; getint(); //返回值為datetime的函式 function getdatetime() : datetime ; 

function getamount(int $num) : int ; getamount('test'); //php5 #php catchable fatal error: argument 1 passed to getint() must be an instance of int, string given… //php7 #fatal error: uncaught typeerror: argument 1 passed to getint() must be of the type integer, string given… getamount('123'); #php7新增的嚴格模式選項開啟下也會報錯【declare(strict_types=1),注意要放到**的第一行】 

try  catch(engineexception $e) \n"; } finally  //這裡用php7試了一下沒有捕獲成功【但是確實丟擲了異常】。。。 #exception: call to undefined function non_exists_func() 

//php5

class collection } #parse error: parse error, expecting `"identifier (t_string)」』... //php7 class collection public function in($arr) public function sort($condition) public function echo($condition) } $collection = new collection(); $collection->in()->foreach()->sort()->echo();

mysql 移到了 ext/pecl 中去了,ereg 移到了 ext/pcre

php7的新特性

截止到目前為止,php官方已經發布了php7的rc5版本,預計在11月份左右會發布第乙個正式版本!現在來說php7的重大特性肯定已經是定型了,不會再有什麼變動了。後續一些版本的迭代主要也就是修修bug,優化之類的。下面就來說話我們一直期待的php7.0新特徵吧。1.標量引數型別宣告 現在支援字串 s...

PHP7的新特性

php7 從發布到現在已經有快三年的時間了,現在已經發展到 php7.2.9 版本了。它的發布給 php 帶來了很大的效能提公升,這主要是得益於 php 對 zend 引擎的深度優化,同時還降低了 php 對系統的資源占用。主要的變化有以下幾點 在php之前的版本中,php 在語法解析階段直接生成了...

php7的新特性

php7新特性 太空船操作符 echo 1 1 0 echo 1 2 1 echo 2 1 1 型別宣告 declare strict types 1 strict types 1表示開啟嚴格模式 function sum int.ints int 3.null合併操作符 page 0 page?0...