亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

PHP7新特性

2019-11-06 06:02:23
字體:
來源:轉載
供稿:網友

標量類型聲明

有兩種模式: 強制 (默認) 和 嚴格模式。 現在可以使用下列類型參數(無論用強制模式還是嚴格模式): 字符串(string), 整數 (int), 浮點數 (float), 以及布爾值 (bool)。在舊版中,函數的參數聲明只能是(Array $arr)、(CLassName $obj)等,基本類型比如Int,String等是不能夠被聲明的

<?phpfunction check(int $bool){var_dump($bool);}check(1);check(true);

若無強制類型轉換,會輸入int(1)bool(true)。轉換后會輸出bool(true) bool(true)

返回值類型聲明

PHP 7 增加了對返回類型聲明的支持。返回類型聲明指明了函數返回值的類型??捎玫念愋团c參數聲明中可用的類型相同。

<?phpfunction arraysSum(array ...$arrays): array{return array_map(function(array $array): int {return array_sum($array);}, $arrays);}PRint_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

以上例程會輸出:

Array([0] => 6[1] => 15[2] => 24)

null合并運算符

項目中存在大量同時使用三元表達式和 isset()的情況,新增了null合并運算符 (??) 這個語法糖。如果變量存在且值不為NULL, 它就會返回自身的值,否則返回第二個操作數。

舊版:isset($_GET[‘id']) ? $_GET[id] : err;

新版:$_GET['id'] ?? 'err';

太空船操作符(組合比較符)

太空船操作符用于比較兩個表達式。當$a小于、等于或大于$b時它分別返回-1、0或1

<?php// Integersecho 1 <=> 1; // 0echo 1 <=> 2; // -1echo 2 <=> 1; // 1// Floatsecho 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1// Stringsecho "a" <=> "a"// 0echo "a" <=> "b"// -1echo "b" <=> "a"// 1?>

通過define()定義常量數組

<?phpdefine('ANIMALS', ['dog''cat''bird']);echo ANIMALS[1]; // outputs "cat"

匿名類

現在支持通過new class 來實例化一個匿名類

<?phpinterface Logger {public function log(string $msg);}class application {private $logger;public function getLogger(): Logger {return $this->logger;}public function setLogger(Logger $logger) {$this->logger = $logger;}}$app new Application;$app->setLogger(new class implements Logger {public function log(string $msg) {echo $msg;}});var_dump($app->getLogger());

Unicode codepoint 轉譯語法

這接受一個以16進制形式的 Unicode codepoint,并打印出一個雙引號或heredoc包圍的 UTF-8 編碼格式的字符串。 可以接受任何有效的 codepoint,并且開頭的 0 是可以省略的。

<?phpecho “/u{9876}”

舊版輸出:/u{9876}

新版輸入:頂

Closure::call()

Closure::call() 現在有著更好的性能,簡短干練的暫時綁定一個方法到對象上閉包并調用它

<?phpclass Test{public $name "lixuan";}//PHP7和PHP5.6都可以$getNameFunc function(){return $this->name;};$name $getNameFunc->bindTo(new Test, 'Test');echo $name();//PHP7可以,PHP5.6報錯$getX function() {return $this->name;};echo $getX->call(new Test);

為unserialize()提供過濾

這個特性旨在提供更安全的方式解包不可靠的數據。它通過白名單的方式來防止潛在的代碼注入。

<?php//將所有對象分為__PHP_Incomplete_Class對象$data = unserialize($foo, ["allowed_classes" => false]);//將所有對象分為__PHP_Incomplete_Class 對象 除了ClassName1和ClassName2$data = unserialize($foo, ["allowed_classes" => ["ClassName1""ClassName2"]);//默認行為,和 unserialize($foo)相同$data = unserialize($foo, ["allowed_classes" => true]);

IntlChar

新增加的 IntlChar 類旨在暴露出更多的 ICU 功能。這個類自身定義了許多靜態方法用于操作多字符集的 unicode 字符。Intl是Pecl擴展,使用前需要編譯進PHP中,也可apt-get/yum/port install php5-intl

<?phpprintf('%x', IntlChar::CODEPOINT_MAX);echo IntlChar::charName('@');var_dump(IntlChar::ispunct('!'));

以上例程會輸出:

10ffffCOMMERCIAL ATbool(true)

預期

預期是向后兼用并增強之前的 assert() 的方法。 它使得在生產環境中啟用斷言為零成本,并且提供當斷言失敗時拋出特定異常的能力。 老版本的API出于兼容目的將繼續被維護,assert()現在是一個語言結構,它允許第一個參數是一個表達式,而不僅僅是一個待計算的 string或一個待測試的boolean。

<?phpini_set('assert.exception', 1);class CustomError extends AssertionError {}assert(false, new CustomError('Some error message'));

以上例程會輸出:

Fatal error: Uncaught CustomError: Some error message

Group use declarations

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

<?php//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};?>

intdiv()

接收兩個參數作為被除數和除數,返回他們相除結果的整數部分。

<?phpvar_dump(intdiv(7, 2));

輸出int(3)

CSPRNG

新增兩個函數: random_bytes() and random_int().可以加密的生產被保護的整數和字符串。我這蹩腳的翻譯,總之隨機數變得安全了。

random_bytes — 加密生存被保護的偽隨機字符串

random_int —加密生存被保護的偽隨機整數

preg_replace_callback_array()

新增了一個函數preg_replace_callback_array(),使用該函數可以使得在使用preg_replace_callback()函數時代碼變得更加優雅。在PHP7之前,回調函數會調用每一個正則表達式,回調函數在部分分支上是被污染了。

session options

現在,session_start()函數可以接收一個數組作為參數,可以覆蓋php.ini中session的配置項。

比如,把cache_limiter設置為私有的,同時在閱讀完session后立即關閉

<?phpsession_start(['cache_limiter' => 'private','read_and_close' => true,]);

生成器的返回值

在PHP5.5引入生成器的概念。生成器函數每執行一次就得到一個yield標識的值。在PHP7中,當生成器迭代完成后,可以獲取該生成器函數的返回值。通過Generator::getReturn()得到。

<?phpfunction generator() {yield 1;yield 2;yield 3;return "a";}$generatorClass = ("generator")();foreach ($generatorClass as $val) {echo $val.” “;}echo $generatorClass->getReturn();

輸出為:1 2 3 a

生成器中引入其他生成器

在生成器中可以引入另一個或幾個生成器,只需要寫yield from functionName1

<?phpfunction generator1(){yield 1;yield 2;yield from generator2();yield from generator3();}function generator2(){yield 3;yield 4;}function generator3(){yield 5;yield 6;}foreach (generator1() as $val){echo $val" ";}

輸出:1 2 3 4 5 6

不兼容性

1、foreach不再改變內部數組指針

在PHP7之前,當數組通過 foreach 迭代時,數組指針會移動?,F在開始,不再如此,見下面代碼。

<?php$array = [0, 1, 2];foreach ($array as &$val) {var_dump(current($array));}

PHP5輸出:

int(1)int(2)bool(false)

PHP7輸出:

int(0)int(0)int(0)

2、foreach通過引用遍歷時,有更好的迭代特性

當使用引用遍歷數組時,現在 foreach 在迭代中能更好的跟蹤變化。例如,在迭代中添加一個迭代值到數組中,參考下面的代碼:

<?php$array = [0];foreach ($array as &$val) {var_dump($val);$array[1] = 1;}

PHP5輸出:

int(0)

PHP7輸出:

int(0)int(1)

3、十六進制字符串不再被認為是數字

含十六進制字符串不再被認為是數字

<?phpvar_dump("0x123" == "291");var_dump(is_numeric("0x123"));var_dump("0xe" "0x1");var_dump(substr("foo""0x1"));

PHP5輸出:

bool(true)bool(true)int(15)string(2) "oo"

PHP7輸出:

bool(false)bool(false)int(0)Notice: A non well formed numeric value encountered in /tmp/test.php on line 5string(3) "foo"

4、PHP7中被移除的函數

被移除的函數列表如下:

call_user_func() 和 call_user_func_array()從PHP 4.1.0開始被廢棄。

已廢棄的 mcrypt_generic_end() 函數已被移除,請使用mcrypt_generic_deinit()代替。

已廢棄的 mcrypt_ecb(), mcrypt_cbc(), mcrypt_cfb() 和 mcrypt_ofb() 函數已被移除。

set_magic_quotes_runtime(), 和它的別名 magic_quotes_runtime()已被移除. 它們在PHP 5.3.0中已經被廢棄,并且 在in PHP 5.4.0也由于魔術引號的廢棄而失去功能。

已廢棄的 set_socket_blocking() 函數已被移除,請使用stream_set_blocking()代替。

dl()在 PHP-FPM 不再可用,在 CLI 和 embed SAPIs 中仍可用。

GD庫中下列函數被移除:imagepsbbox()、imagepsencodefont()、imagepsextendfont()、imagepsfreefont()、imagepsloadfont()、imagepsslantfont()、imagepstext()

在配置文件php.ini中,always_populate_raw_post_data、asp_tags、xsl.security_prefs被移除了。

5、new 操作符創建的對象不能以引用方式賦值給變量

new 操作符創建的對象不能以引用方式賦值給變量

<?phpclass C {}$c =& new C;

PHP5輸出:

Deprecated: Assigning the return value of new by reference is deprecated in /tmp/test.php on line 3

PHP7輸出:

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

6、移除了 ASP 和 script PHP 標簽

使用類似 ASP 的標簽,以及 script 標簽來區分 PHP 代碼的方式被移除。 受到影響的標簽有:<% %>、<%= %>、<script language="php"> </script>

7、從不匹配的上下文發起調用

在不匹配的上下文中以靜態方式調用非靜態方法, 在 PHP 5.6 中已經廢棄, 但是在 PHP 7.0 中, 會導致被調用方法中未定義 $this 變量,以及此行為已經廢棄的警告。

<?phpclass A {public function test() { var_dump($this); }}// 注意:并沒有從類 A 繼承class B {public function callNonStaticMethodOfA() { A::test(); }}(new B)->callNonStaticMethodOfA();

PHP5輸出:

Deprecated: Non-static method A::test() should not be called statically, assuming $this from incompatible context in /tmp/test.php on line 8object(B)#1 (0) {}

PHP7輸出:

Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8Notice: Undefined variable: this in /tmp/test.php on line 3

NULL

8、在數值溢出的時候,內部函數將會失敗

將浮點數轉換為整數的時候,如果浮點數值太大,導致無法以整數表達的情況下, 在之前的版本中,內部函數會直接將整數截斷,并不會引發錯誤。 在 PHP 7.0 中,如果發生這種情況,會引發 E_WARNING 錯誤,并且返回 NULL。

9、JSON 擴展已經被 JSOND 取代

JSON 擴展已經被 JSOND 擴展取代。 對于數值的處理,有以下兩點需要注意的: 第一,數值不能以點號(.)結束 (例如,數值 34. 必須寫作 34.0 或 34)。 第二,如果使用科學計數法表示數值,e 前面必須不是點號(.) (例如,3.e3 必須寫作 3.0e3 或 3e3)

10、INI 文件中 # 注釋格式被移除

在配置文件INI文件中,不再支持以 # 開始的注釋行, 請使用 ;(分號)來表示注釋。 此變更適用于 php.ini 以及用 parse_ini_file() 和 parse_ini_string() 函數來處理的文件。

11、$HTTP_RAW_POST_DATA 被移除

不再提供 $HTTP_RAW_POST_DATA 變量。 請使用 php://input 作為替代。

12、yield 變更為右聯接運算符

在使用 yield 關鍵字的時候,不再需要括號, 并且它變更為右聯接操作符,其運算符優先級介于 print 和 => 之間。 這可能導致現有代碼的行為發生改變??梢酝ㄟ^使用括號來消除歧義。

<?phpecho yield -1;// 在之前版本中會被解釋為:echo (yield) - 1;// 現在,它將被解釋為:echo yield (-1);yield $foo or die;// 在之前版本中會被解釋為:yield ($foo or die);// 現在,它將被解釋為:(yield $fooor die;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美巨猛xxxx猛交黑人97人| 欧美精品18videos性欧美| 亚洲精品国产综合久久| 久久青草福利网站| 中文字幕一精品亚洲无线一区| 亚洲精品国偷自产在线99热| 8090理伦午夜在线电影| 亚洲欧美国产精品久久久久久久| 精品国产成人av| 国产精品视频一区二区三区四| 国产亚洲精品美女久久久| 日本老师69xxx| 国产欧美一区二区三区在线看| 久久午夜a级毛片| 亚洲精品www久久久| 欧美激情国内偷拍| 亚洲综合日韩中文字幕v在线| 久久这里只有精品视频首页| 亚洲欧美成人网| 青青草原成人在线视频| 91国产视频在线| 亚洲欧洲国产伦综合| 亚洲精品黄网在线观看| 国产一区二区三区毛片| 中文字幕国内精品| 欧美激情在线有限公司| www亚洲欧美| 亚洲美女黄色片| 国产小视频91| 欧美激情第1页| 日韩av在线电影网| 久久精品小视频| 亚洲bt天天射| 国产美女久久精品香蕉69| 亚洲国产三级网| 精品网站999www| 亚洲精品丝袜日韩| 在线观看日韩欧美| 97精品视频在线| 91免费版网站入口| 亚洲精品国产电影| 欧美成人免费全部观看天天性色| 精品国偷自产在线| 亚洲精品综合精品自拍| 中文字幕日韩有码| 琪琪亚洲精品午夜在线| 久久亚洲精品网站| 久久亚洲精品国产亚洲老地址| 国产日韩av在线播放| 欧美另类99xxxxx| 在线一区二区日韩| 亚洲影影院av| 亚洲午夜av久久乱码| 国产精品xxx视频| 国产成人精品免费久久久久| 国产欧美中文字幕| 久久久久久com| 久久久亚洲精选| 成人有码视频在线播放| 热re91久久精品国99热蜜臀| 日韩av综合网站| 在线成人一区二区| 97涩涩爰在线观看亚洲| 日韩大陆毛片av| 亚洲第一中文字幕| 一区二区在线视频| 欧美国产日产韩国视频| 久久精品电影网站| 在线免费观看羞羞视频一区二区| 亚洲福利在线播放| 精品高清美女精品国产区| 九九九久久国产免费| 精品国产一区二区三区久久久狼| 久久中文字幕一区| 欧美日韩xxx| 国产精品亚发布| 久久99久久亚洲国产| 在线观看国产成人av片| 欧美激情va永久在线播放| 亚洲一区二区自拍| 亚洲欧洲在线播放| 91久久久久久久一区二区| 黑人巨大精品欧美一区二区| 中文字幕国产精品久久| 日韩成人网免费视频| 久久精品国产69国产精品亚洲| 精品中文字幕视频| 日韩欧美国产黄色| 国产精品高精视频免费| 国产精品免费久久久久久| 亚洲片在线资源| 久久国产精品偷| 色中色综合影院手机版在线观看| 精品一区二区电影| 91久久精品美女高潮| 色综合男人天堂| 亚洲男人的天堂在线播放| 91在线视频精品| 欧美影院在线播放| 国产中文字幕亚洲| 日韩亚洲欧美中文高清在线| 欧美激情a∨在线视频播放| 一本色道久久88综合亚洲精品ⅰ| 亚洲国产成人av在线| 中文字幕欧美国内| 中国china体内裑精亚洲片| 色播久久人人爽人人爽人人片视av| 国产精品亚洲精品| 91沈先生在线观看| 亚洲最大的av网站| 国内揄拍国内精品少妇国语| 国产主播喷水一区二区| 97久久国产精品| 亚洲女同精品视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲电影免费观看高清| 国产亚洲美女精品久久久| 色哟哟亚洲精品一区二区| 精品自在线视频| 亚洲欧美日本另类| 国产精品大陆在线观看| 在线一区二区日韩| 亚洲一区二区三区sesese| 8x拔播拔播x8国产精品| 色综合亚洲精品激情狠狠| 欧美亚洲另类视频| 中文字幕精品视频| 777777777亚洲妇女| 日韩av在线免费观看一区| 国产女人18毛片水18精品| 2019中文字幕在线免费观看| 日韩精品免费一线在线观看| 亚洲精品国产欧美| 久久久人成影片一区二区三区观看| 欧美中文在线观看| 亚洲第一区中文字幕| 色偷偷av一区二区三区乱| 亚洲影院污污.| 中文国产亚洲喷潮| 国产精品久久久久久久久影视| 日韩毛片中文字幕| 97国产在线视频| 亚洲va久久久噜噜噜| 国产精品一区二区久久精品| 91九色蝌蚪国产| 亚洲va欧美va国产综合剧情| 国产精品视频最多的网站| 国产成人精品久久二区二区| 91香蕉嫩草影院入口| 亚洲欧洲在线看| 国产在线高清精品| 97人人爽人人喊人人模波多| 亚洲第一区第一页| 欧美性色xo影院| 秋霞av国产精品一区| 色天天综合狠狠色| 国产一区二区三区网站| 亚洲精品美女在线观看播放| 亚洲欧美一区二区精品久久久| 久久精品美女视频网站| 69av视频在线播放| 日韩三级影视基地| 午夜精品久久久久久99热软件| 欧美理论电影在线播放|