摘要:標量類型聲明在中,引入了一個新的特性,即標量類型聲明。棄用樣式構造函數是與它們定義的類具有相同名稱的方法,現在已被棄用,并且將來將被刪除。
說明
PHP 7使用新的Zend Engine 3.0將應用程序性能提高近兩倍,內存消耗比PHP 5.6高出50%。它允許服務更多的并發用戶,而不需要任何額外的硬件。PHP 7是考慮到今天的工作負載而設計和重構的。
PHP新功能總結改進的性能 - 將PHPNG代碼合并到PHP7中,速度是PHP 5的兩倍。
降低內存消耗 - 優化的PHP 7使用較少的資源。
標量類型聲明 - 現在可以強制執行參數和返回類型。
一致的64位支持 - 對64位體系結構機器的一致支持。
改進了異常層次 - 異常層次得到了改進
許多致命的錯誤轉換為例外 - 例外范圍增加,涵蓋許多致命的錯誤轉換為例外。
安全隨機數發生器 - 增加新的安全隨機數發生器API。
已棄用的SAPI和擴展已刪除 - 各種舊的和不受支持的SAPI和擴展從最新版本中刪除。
空合并運算符(?) - 添加了新的空合并運算符。
返回和標量類型聲明 - 支持所添加的返回類型和參數類型。
匿名類 - 支持匿名添加。
零成本斷言 - 支持零成本斷言增加。
標量類型聲明在PHP 7中,引入了一個新的特性,即標量類型聲明。標量類型聲明有兩個選項
強制 - 強制是默認模式,不需要指定。
嚴格 - 嚴格的模式已經明確暗示。
功能參數的以下類型可以使用上述模式強制執行
float
int
bool
string
interfaces
array
callable
強制模式
嚴格模式返回類型聲明
有效的返回類型
無效返回類型空合并運算符
在PHP 7中,引入了一個新的特性,即空合并運算符(??)。它用來替代與isset()函數結合的三元操作。該空如果它存在,而不是空合并運算符返回第一個操作數; 否則返回第二個操作數。
"); // 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 ?>
它用來比較兩個表達式。當第一個表達式分別小于,等于或大于第二個表達式時,它返回-1,0或1。字符串比較ASCII
//integer comparison print( 1 <=> 1);print("常量數組
"); print( 1 <=> 2);print("
"); print( 2 <=> 1);print("
"); // output 0 -1 1
使用define()函數定義數組常量。在PHP 5.6中,只能使用const關鍵字來定義它們。
匿名類現在可以使用新類來定義匿名類。匿名類可以用來代替完整的類定義。
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()方法被添加為一個簡短的方式來臨時綁定一個對象作用域到一個閉包并調用它。與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()函數,以便在對不可信數據上的對象進行反序列化時提供更好的安全性。它可以防止可能的代碼注入,并使開發人員能夠對可以反序列化的類進行白名單。
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功能。這個類定義了一些靜態方法和常量,可以用來處理Unicode字符。在使用這個課程之前,你需要安裝Intl擴展。
CSPRNG在PHP 7中,引入了兩個新的函數來以跨平臺的方式生成密碼安全的整數和字符串。
random_bytes() - 生成密碼安全的偽隨機字節。
random_int() - 生成密碼安全的偽隨機整數。
使用聲明從PHP7開始,可以使用單個use語句從相同的命名空間導入類,函數和常量,而不是使用多個use語句。
整數部分PHP 7引入了一個新的函數intdiv(),它對它的操作數進行整數除法,并將除法運算返回為int。
會話選項session_start()函數接受來自PHP7 + 的一系列選項來覆蓋php.ini中設置的會話配置指令。這些選項支持session.lazy_write,默認情況下,它會導致PHP在會話數據發生更改時覆蓋任何會話文件。
添加的另一個選項是read_and_close,它表示應該讀取會話數據,然后應該立即關閉會話。例如,將session.cache_limiter設置為private,并使用以下代碼片段將標志設置為在讀取完畢后立即關閉會話。
"private", "read_and_close" => true, ]); ?>棄用
PHP 4樣式構造函數是與它們定義的類具有相同名稱的方法,現在已被棄用,并且將來將被刪除。如果PHP 4的構造函數是類中定義的唯一構造函數,則PHP 7將發出E_DEPRECATED。實現__construct()方法的類不受影響。
對非靜態方法的靜態調用已被棄用,并可能在將來被刪除
password_hash()函數的salt選項已被棄用,所以開發人員不會生成自己的(通常是不安全的)鹽。當開發人員不提供鹽時,函數本身會生成密碼安全的鹽,因此不再需要定制鹽的生成。
該capture_session_meta SSL上下文選項已被棄用。SSL元數據現在通過stream_get_meta_data()函數使用。錯誤處理
從PHP 7開始,錯誤處理和報告已經改變。而不是通過PHP 5使用的傳統錯誤報告機制來報告錯誤,現在大多數錯誤都是通過拋出錯誤異常來處理的。與異常類似,這些錯誤異常會一直冒泡,直到它們到達第一個匹配的catch塊。如果沒有匹配的塊,則使用set_exception_handler()安裝的默認異常處理程序將被調用。如果沒有默認的異常處理程序,那么異常將被轉換為致命錯誤,并將像傳統的錯誤一樣處理。
由于錯誤層次結構不是從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 ?>結尾說明
2017已經接近尾聲,嶄新的2018即將來臨,在這個知識日新月異的時代,溫故而知新。script maker!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26229.html
摘要:錯誤是運行期間的嚴重問題,通常是因為代碼出錯而造成,必須要修正它,否則會使停止執行。警告是非致命錯誤,程序執行也不會因此而中止。 showImg(https://segmentfault.com/img/remote/1460000018197894?w=720&h=398); 前言 近期因公司內部轉崗,開始參與PHP項目進行后端開發,一直都是強類型寫的比較多,弱類型語言也有接觸了一些...
摘要:包括安裝與下載,證書申請與配置,升級到,服務器的簡單配置。這對一個應用來說,所造成的后果無疑是毀滅性的。然后在新建一個目錄,將剛才的文件放進去,便于統一管理其中紅色框框的是要用到文件。 原文地址: here 在部署自己的博客到 LEMP 環境的時候,遇到了一些小挫折,現在把經驗分享出來,讓大家少走彎路。包括Php7.1安裝與下載,SSL證書申請與配置,Mysql升級到5.7,Ngin...
摘要:性能優化使用棧內存在引擎和擴展中,經常要創建一個變量,底層就是一個指針。而可以直接使用棧內存作用節省一次內存分配和管理存儲值,查詢不需要重復計算為字符串單獨創建了新類型叫做,除了指針和長度之外,增加了一個字段,用于保存字符串的值。 變量類型 PHP7版本函數的參數和返回值增加了類型限定。原因:為了PHP7.1版本JIT特性做準備,增加類型之后PHP, JIT可以準確判斷變量類型,生成最...
摘要:我們修改上面代碼,再來看下返回值類型限制的情況運行結果這段代碼我們額外聲明了返回值的類型為型。對函數返回值的聲明做了擴充,可以定義其返回值為,無論是否開啟嚴格模式,只要函數中有以外的其他語句都會報錯。 順風車運營研發團隊 王坤 發表至21CTO公眾號(https://mp.weixin.qq.com/s/ph...) showImg(https://segmentfault.c...
閱讀 3043·2021-10-13 09:39
閱讀 1884·2021-09-02 15:15
閱讀 2450·2019-08-30 15:54
閱讀 1810·2019-08-30 14:01
閱讀 2608·2019-08-29 14:13
閱讀 1422·2019-08-29 13:10
閱讀 2736·2019-08-28 18:15
閱讀 3894·2019-08-26 10:20