摘要:標量類型聲明在中,引入了一個新的特性,即標量類型聲明。棄用樣式構(gòu)造函數(shù)是與它們定義的類具有相同名稱的方法,現(xiàn)在已被棄用,并且將來將被刪除。
說明
PHP 7使用新的Zend Engine 3.0將應(yīng)用程序性能提高近兩倍,內(nèi)存消耗比PHP 5.6高出50%。它允許服務(wù)更多的并發(fā)用戶,而不需要任何額外的硬件。PHP 7是考慮到今天的工作負載而設(shè)計和重構(gòu)的。
PHP新功能總結(jié)改進的性能 - 將PHPNG代碼合并到PHP7中,速度是PHP 5的兩倍。
降低內(nèi)存消耗 - 優(yōu)化的PHP 7使用較少的資源。
標量類型聲明 - 現(xiàn)在可以強制執(zhí)行參數(shù)和返回類型。
一致的64位支持 - 對64位體系結(jié)構(gòu)機器的一致支持。
改進了異常層次 - 異常層次得到了改進
許多致命的錯誤轉(zhuǎn)換為例外 - 例外范圍增加,涵蓋許多致命的錯誤轉(zhuǎn)換為例外。
安全隨機數(shù)發(fā)生器 - 增加新的安全隨機數(shù)發(fā)生器API。
已棄用的SAPI和擴展已刪除 - 各種舊的和不受支持的SAPI和擴展從最新版本中刪除。
空合并運算符(?) - 添加了新的空合并運算符。
返回和標量類型聲明 - 支持所添加的返回類型和參數(shù)類型。
匿名類 - 支持匿名添加。
零成本斷言 - 支持零成本斷言增加。
標量類型聲明在PHP 7中,引入了一個新的特性,即標量類型聲明。標量類型聲明有兩個選項
強制 - 強制是默認模式,不需要指定。
嚴格 - 嚴格的模式已經(jīng)明確暗示。
功能參數(shù)的以下類型可以使用上述模式強制執(zhí)行
float
int
bool
string
interfaces
array
callable
強制模式
嚴格模式返回類型聲明
有效的返回類型
無效返回類型空合并運算符
在PHP 7中,引入了一個新的特性,即空合并運算符(??)。它用來替代與isset()函數(shù)結(jié)合的三元操作。該空如果它存在,而不是空合并運算符返回第一個操作數(shù); 否則返回第二個操作數(shù)。
"); // Equivalent code using ternary operator $username = isset($_GET["username"]) ? $_GET["username"] : "not passed"; print($username); print("飛船運算符
"); // Chaining ?? operation $username = $_GET["username"] ?? $_POST["username"] ?? "not passed"; print($username); // output //not passed ?>
它用來比較兩個表達式。當?shù)谝粋€表達式分別小于,等于或大于第二個表達式時,它返回-1,0或1。字符串比較ASCII
//integer comparison print( 1 <=> 1);print("常量數(shù)組
"); print( 1 <=> 2);print("
"); print( 2 <=> 1);print("
"); // output 0 -1 1
使用define()函數(shù)定義數(shù)組常量。在PHP 5.6中,只能使用const關(guān)鍵字來定義它們。
匿名類現(xiàn)在可以使用新類來定義匿名類。匿名類可以用來代替完整的類定義。
logger; } public function setLogger(Logger $logger) { $this->logger = $logger; } } $app = new Application; $app->setLogger(new class implements Logger { public function log(string $msg) { print($msg); } }); $app->getLogger()->log("My first Log Message"); ?> //output My first Log MessageClosure類
Closure :: call()方法被添加為一個簡短的方式來臨時綁定一個對象作用域到一個閉包并調(diào)用它。與PHP5的bindTo相比,它的性能要快得多。
在PHP 7之前
x; }; // Bind a clousure $value = $getValue->bindTo(new A, "A"); print($value()); //output 1 ?>
PHP 7+
x; }; print($value->call(new A)); //output 1 ?>過濾unserialize
PHP 7引入了過濾的unserialize()函數(shù),以便在對不可信數(shù)據(jù)上的對象進行反序列化時提供更好的安全性。它可以防止可能的代碼注入,并使開發(fā)人員能夠?qū)梢苑葱蛄谢念愡M行白名單。
obj1prop = 1; $obj2 = new MyClass2(); $obj2->obj2prop = 2; $serializedObj1 = serialize($obj1); $serializedObj2 = serialize($obj2); // default behaviour that accepts all classes // second argument can be ommited. // if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object $data = unserialize($serializedObj1 , ["allowed_classes" => true]); // converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2 $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); print($data->obj1prop); print("IntlChar
"); print($data2->obj2prop); //output 1 2 ?>
在PHP7中,增加了一個新的IntlChar類,它試圖揭示額外的ICU功能。這個類定義了一些靜態(tài)方法和常量,可以用來處理Unicode字符。在使用這個課程之前,你需要安裝Intl擴展。
CSPRNG在PHP 7中,引入了兩個新的函數(shù)來以跨平臺的方式生成密碼安全的整數(shù)和字符串。
random_bytes() - 生成密碼安全的偽隨機字節(jié)。
random_int() - 生成密碼安全的偽隨機整數(shù)。
使用聲明從PHP7開始,可以使用單個use語句從相同的命名空間導入類,函數(shù)和常量,而不是使用多個use語句。
整數(shù)部分PHP 7引入了一個新的函數(shù)intdiv(),它對它的操作數(shù)進行整數(shù)除法,并將除法運算返回為int。
會話選項session_start()函數(shù)接受來自PHP7 + 的一系列選項來覆蓋php.ini中設(shè)置的會話配置指令。這些選項支持session.lazy_write,默認情況下,它會導致PHP在會話數(shù)據(jù)發(fā)生更改時覆蓋任何會話文件。
添加的另一個選項是read_and_close,它表示應(yīng)該讀取會話數(shù)據(jù),然后應(yīng)該立即關(guān)閉會話。例如,將session.cache_limiter設(shè)置為private,并使用以下代碼片段將標志設(shè)置為在讀取完畢后立即關(guān)閉會話。
"private", "read_and_close" => true, ]); ?>棄用
PHP 4樣式構(gòu)造函數(shù)是與它們定義的類具有相同名稱的方法,現(xiàn)在已被棄用,并且將來將被刪除。如果PHP 4的構(gòu)造函數(shù)是類中定義的唯一構(gòu)造函數(shù),則PHP 7將發(fā)出E_DEPRECATED。實現(xiàn)__construct()方法的類不受影響。
對非靜態(tài)方法的靜態(tài)調(diào)用已被棄用,并可能在將來被刪除
password_hash()函數(shù)的salt選項已被棄用,所以開發(fā)人員不會生成自己的(通常是不安全的)鹽。當開發(fā)人員不提供鹽時,函數(shù)本身會生成密碼安全的鹽,因此不再需要定制鹽的生成。
該capture_session_meta SSL上下文選項已被棄用。SSL元數(shù)據(jù)現(xiàn)在通過stream_get_meta_data()函數(shù)使用。錯誤處理
從PHP 7開始,錯誤處理和報告已經(jīng)改變。而不是通過PHP 5使用的傳統(tǒng)錯誤報告機制來報告錯誤,現(xiàn)在大多數(shù)錯誤都是通過拋出錯誤異常來處理的。與異常類似,這些錯誤異常會一直冒泡,直到它們到達第一個匹配的catch塊。如果沒有匹配的塊,則使用set_exception_handler()安裝的默認異常處理程序?qū)⒈徽{(diào)用。如果沒有默認的異常處理程序,那么異常將被轉(zhuǎn)換為致命錯誤,并將像傳統(tǒng)的錯誤一樣處理。
由于錯誤層次結(jié)構(gòu)不是從Exception擴展的,所以使用catch(Exception $ e){...}塊來處理PHP 5中未捕獲的異常的代碼將不會處理這樣的錯誤。catch(Error $ e){...}塊或set_exception_handler()處理程序是處理致命錯誤所必需的。
n % 0; return $value; } catch (DivisionByZeroError $e) { return $e->getMessage(); } } } $mathOperationsObj = new MathOperations(); print($mathOperationsObj->doOperation()); // output Modulo by zero ?>結(jié)尾說明
2017已經(jīng)接近尾聲,嶄新的2018即將來臨,在這個知識日新月異的時代,溫故而知新。script maker!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26229.html
摘要:錯誤是運行期間的嚴重問題,通常是因為代碼出錯而造成,必須要修正它,否則會使停止執(zhí)行。警告是非致命錯誤,程序執(zhí)行也不會因此而中止。 showImg(https://segmentfault.com/img/remote/1460000018197894?w=720&h=398); 前言 近期因公司內(nèi)部轉(zhuǎn)崗,開始參與PHP項目進行后端開發(fā),一直都是強類型寫的比較多,弱類型語言也有接觸了一些...
摘要:包括安裝與下載,證書申請與配置,升級到,服務(wù)器的簡單配置。這對一個應(yīng)用來說,所造成的后果無疑是毀滅性的。然后在新建一個目錄,將剛才的文件放進去,便于統(tǒng)一管理其中紅色框框的是要用到文件。 原文地址: here 在部署自己的博客到 LEMP 環(huán)境的時候,遇到了一些小挫折,現(xiàn)在把經(jīng)驗分享出來,讓大家少走彎路。包括Php7.1安裝與下載,SSL證書申請與配置,Mysql升級到5.7,Ngin...
摘要:性能優(yōu)化使用棧內(nèi)存在引擎和擴展中,經(jīng)常要創(chuàng)建一個變量,底層就是一個指針。而可以直接使用棧內(nèi)存作用節(jié)省一次內(nèi)存分配和管理存儲值,查詢不需要重復計算為字符串單獨創(chuàng)建了新類型叫做,除了指針和長度之外,增加了一個字段,用于保存字符串的值。 變量類型 PHP7版本函數(shù)的參數(shù)和返回值增加了類型限定。原因:為了PHP7.1版本JIT特性做準備,增加類型之后PHP, JIT可以準確判斷變量類型,生成最...
摘要:我們修改上面代碼,再來看下返回值類型限制的情況運行結(jié)果這段代碼我們額外聲明了返回值的類型為型。對函數(shù)返回值的聲明做了擴充,可以定義其返回值為,無論是否開啟嚴格模式,只要函數(shù)中有以外的其他語句都會報錯。 順風車運營研發(fā)團隊 王坤 發(fā)表至21CTO公眾號(https://mp.weixin.qq.com/s/ph...) showImg(https://segmentfault.c...
閱讀 3033·2021-10-13 09:39
閱讀 1880·2021-09-02 15:15
閱讀 2439·2019-08-30 15:54
閱讀 1803·2019-08-30 14:01
閱讀 2602·2019-08-29 14:13
閱讀 1411·2019-08-29 13:10
閱讀 2731·2019-08-28 18:15
閱讀 3870·2019-08-26 10:20