真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php7的主要新特性有哪些-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、加查網(wǎng)站維護(hù)、網(wǎng)站推廣。

php7的主要新特性有哪些?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

截止到目前為止,PHP官方已經(jīng)發(fā)布了最新版本是php7.2而php6版本被跳過直接迎來了php7。

PHP 7.0.0 Alpha 1 使用新版的ZendEngine引擎,帶來了許多新的特性,以下是不完全列表:

性能提升:PHP7比PHP5.6性能提升了兩倍。 Improved performance: PHP 7 is up to twice as fast as PHP 5.6

全面一致的64位支持。 Consistent 64-bit support

以前的許多致命錯(cuò)誤,現(xiàn)在改成拋出異常。Many fatal errors are now Exceptions

移除了一些老的不在支持的SAPI(服務(wù)器端應(yīng)用編程端口)和擴(kuò)展。Removal of old and unsupported SAPIs and extensions

新增了空接合操作符。The null coalescing operator (??)

新增加了結(jié)合比較運(yùn)算符。Combined comparison Operator (<=>)

新增加了函數(shù)的返回類型聲明。Return Type Declarations

新增加了標(biāo)量類型聲明。Scalar Type Declarations

新增加匿名類。Anonymous Classes。

新特性預(yù)覽

ZEND引擎升級(jí)到Zend Engine 3,也就是所謂的PHP NG
增加抽象語法樹,使編譯更加科學(xué)
64位的INT支持
統(tǒng)一的變量語法
原聲的TLS - 對(duì)擴(kuò)展開發(fā)有意義
一致性foreach循環(huán)的改進(jìn)
新增 <=>、**、?? 、\u{xxxx}操作符
增加了返回類型的聲明
增加了標(biāo)量類型的聲明
核心錯(cuò)誤可以通過異常捕獲了
增加了上下文敏感的詞法分析

移除的一些特性

1.移除一些舊的擴(kuò)展,被移遷移到了PECL(例如:mysql)
2.移除SAPIs的支持
3.4.16進(jìn)制的字符串轉(zhuǎn)換被廢除了

//PHP5
"0x10" == "16"

//PHP7
"0x10" != "16"


5.HTTP_RAW_POST_DATA移除了(可以使用php://input替代)


6.靜態(tài)函數(shù)里面不再支持通過一個(gè)不兼容的$this調(diào)用一個(gè)非靜態(tài)的函數(shù)了
$o = & new className{},不再支持這樣的寫法
7.php.ini文件移除了#作為注釋,統(tǒng)一用;去注釋

一些行為的改變

不在支持函數(shù)定義同名參數(shù)
類型的同名構(gòu)造函數(shù)不推薦使用了(目前沒有移除,后續(xù)會(huì)移除)
String、int、float等這些關(guān)鍵字不能被作為類名使用了
func_get_args()獲取的是當(dāng)前變量的值

function test ($num) {
  $num++;
  var_dump(func_get_args()[0]);
};

test(1)

//PHP5
int(1)

//PHP7
int(2)

下面就挑選了一些主要的、核心的、對(duì)我們PHPer來說比較重要的特性介紹一下

PHP NG

新的php引擎優(yōu)化了很多地方,也正式因?yàn)槿绱耍攀沟胮hp7相對(duì)于php5性能有了接近兩倍的提升!

ZVAL結(jié)構(gòu)的重構(gòu)

php7的主要新特性有哪些

左邊是PHP5的zval(24字節(jié)),右邊是PHP7的zval(16字節(jié));

可以看出來php7的zval要比php5還要復(fù)雜,但是卻能從24個(gè)字節(jié)下降到16個(gè)字節(jié),為什呢?

在C語言中struct的每一個(gè)成員變量要各自占據(jù)一塊獨(dú)立的內(nèi)存空間,而union里的成員變量是共用一塊內(nèi)存空間(php7中大量使用union替換了struct)。因此,雖然成員變量看起來多了不少,但是實(shí)際占據(jù)的內(nèi)存空間有很多都是公用的卻下降了。

使用新的Zend Array替換之前的HashTale結(jié)構(gòu)

我們php程序中使用最多、最有用、最方便、最靈活的就是數(shù)組了,而php5它的底層就是HashTable實(shí)現(xiàn)的,php7使用了新的Zend Array類型,性能和訪問速度上都有了大幅度提升!
一些非常常用,開銷不大的的函數(shù)直接變成了引擎支持的opcode

call_user_function(_array) => ZEND_INIT_USER_CALL
is_int/string/array/* => ZEND_TYPE_CHECK
strlen => ZEND_STRLEN
defined => ZEND+DEFINED

使用了新的內(nèi)存分配,管理方式,減少了內(nèi)存的浪費(fèi)
核心排序zend_sort的優(yōu)化

//PHP5 - 快速排序(非穩(wěn)定排序)
array(1 => 0, 0 => 0)

//PHP7 - 快速排序+選擇排序(穩(wěn)定排序)
array(0 => 0, 1 => 0)

小于16個(gè)元素的使用選擇排序,大于16個(gè)按照16個(gè)為單位去分割,分別使用選擇排序,然后再全部合起來使用快速排序。排序較之前相比,內(nèi)部元素由非穩(wěn)定排序變成穩(wěn)定排序,減少元素的交換次數(shù),減少對(duì)內(nèi)存的操作次數(shù),性能提升40%
抽象語法樹

php7的主要新特性有哪些

假如現(xiàn)在我們有這樣的需求,要對(duì)php源文件就行語法檢測(cè),實(shí)現(xiàn)編碼規(guī)范。php5之前的話,沒有AST,直接從parser就生成了opcodes!就需要借助一些外部的php語法解析器來實(shí)現(xiàn);而php7增加了AST,我們可以自己去實(shí)現(xiàn)這樣一個(gè)擴(kuò)展,利用擴(kuò)展提供的函數(shù)可以直接獲取文件對(duì)應(yīng)的的AST結(jié)構(gòu),而這樣的結(jié)構(gòu)正是我們可以識(shí)別的,所以就可以在這個(gè)基礎(chǔ)上去做一些優(yōu)化和判斷了。

64位的INT支持

支持存儲(chǔ)大于2GB的字符串
支持上傳大小大于2GB的文件
保證字符串在所有平臺(tái)上【64位】都是64bit
統(tǒng)一的語法變量

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

//PHP5
($$foo)[‘bar']['baz']

//PHP7: 遵循從左到右的原則
${$foo[‘bar']['baz']}

foreach循環(huán)的改進(jìn)

//PHP5
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
int(2)
int(2)
int(2)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
int(2)
int(3)
bool(false)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
int(1)
int(1)
int(1)

//PHP7:不再操作數(shù)據(jù)的內(nèi)部指針了
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
int(1)
int(1)
int(1)

$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)

新增的幾個(gè)操作符

//<=> - 比較兩個(gè)數(shù)的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】
echo 1 <=> 2;//-1
echo 1 <=> 1;//0
echo 1 <=> 0;//1

// ** - 【a的b次方】
echo 2 ** 3;//8

//?? - 三元運(yùn)算符的改進(jìn)
//php5
$_GET['name'] ? $_GET['name'] : '';//Notice: Undefined index: …
//php7
$_GET['name'] ?? '' -> '';

//\u{xxxx} - Unicode字符的解析
echo "\u{4f60}";//你
echo "\u{65b0}";//新

返回類型的聲明

function getInt() : int {
  return “test”;
};

getInt();

//PHP5
#PHP Parse error: parse error, expecting '{'...

//PHP7
#Fatal error:Uncaught TypeError: Return value of getInt() must be of the type integer, string returned

標(biāo)量類型的聲明

function getInt(int $num) : int {
  return $num;
};

getInt(“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…

核心錯(cuò)誤可以通過異常捕獲了

try {
  non_exists_func();
} catch(EngineException $e) {
  echo “Exception: {$e->getMessage();}\n”;
}

//這里用php7試了一下還是沒法捕獲,但是看鳥哥介紹說是可行的。。。
#Exception: Call to undefined function non_exists_func()

上下問敏感的詞法分析

//PHP5
class Collection {public function foreach($arr) {}}
#Parse error: parse error, expecting `"identifier (T_STRING)”'...

//PHP7
class Collection {
  public function foreach($arr) {}
  public function in($arr){}
  public function where($condition){}
  public function order($condition){}
}
$collection = new Collection();
$collection->where()->in()->foreach()->order();

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


當(dāng)前名稱:php7的主要新特性有哪些-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://weahome.cn/article/cssgis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部