摘要:此版本被認為是在年發(fā)布后最重要的變化。標量類型聲明有兩種選擇強制強制性是默認模式,不需要指定。嚴格嚴格模式有明確的暗示。
PHP7是什么鬼?
PHP7是PHP編程語言的一個主要版本,并號稱是開發(fā)Web應(yīng)用程序的一次革命,可開發(fā)和交付移動企業(yè)和云應(yīng)用。此版本被認為是PHP在2004年發(fā)布PHP5后最重要的變化。
新功能PHP7有加入幾十個功能,最顯著的是下面提到 -
改進的性能 - PHPNG代碼合并在PHP7中,這是比 PHP5快兩倍; 降低內(nèi)存消耗 - 優(yōu)化后PHP7使用較少的資源; 標量類型聲明 - 現(xiàn)在,參數(shù)和返回值類型可以被強制執(zhí)行; 一致性的64位支持 - 64位架構(gòu)機器持續(xù)支持; 改進異常層次結(jié)構(gòu) - 異常層次結(jié)構(gòu)得到改善; 許多致命錯誤轉(zhuǎn)換成異常 - 異常的范圍增大覆蓋為許多致命的錯誤轉(zhuǎn)化異常; 安全隨機數(shù)發(fā)生器 - 加入新的安全隨機數(shù)生成器的API; 已過時的API和擴展刪除 - 不同的舊的和不支持的應(yīng)用程序和擴展,從最新的版本中刪除; null合并運算符(??)的新空合并運算符被加入; 返回和標量類型聲明支持返回類型和參數(shù)類型也被加入; 增加了對匿名匿名類的支持; 零成本聲明支持零成本加入斷言。
PHP7使用新的 Zend Engine 3.0 提高應(yīng)用程序性能兩倍,比PHP5.6 低了 50% 的內(nèi)存消耗。 它可以服務(wù)于更多的并發(fā)用戶,無需任何額外的硬件。考慮到當(dāng)今的工作量 PHP7設(shè)計并重構(gòu)。
PHP7 - 標量類型聲明在PHP7有一個新的功能,標量類型聲明已被引入。標量類型聲明有兩種選擇:
強制 - 強制性是默認模式,不需要指定。 嚴格 - 嚴格模式有明確的暗示。
以下幾種類型的函數(shù)參數(shù)可以通過上述方式強制執(zhí)行:
int float bool string interfaces array callable
示例 - 強制模式
// Coercive mode
function sum(int ...$ints)
{
return array_sum($ints);
}
print(sum(2, "3", 4.1));
?>
瀏覽器將產(chǎn)生以下輸出 -
9
示例 - 嚴格模式
// Strict mode
declare(strict_types=1);
function sum(int ...$ints)
{
return array_sum($ints);
}
print(sum(2, "3", 4.1));
?>
瀏覽器將產(chǎn)生以下輸出 -
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ..
PHP7 - 返回類型聲明在PHP7中有一個新的功能,已引入返回類型聲明。返回類型聲明指定一個函數(shù)的返回值類型。以下類型返回類型是可以聲明的:
int float bool string interfaces array callable
示例 - 有效的返回類型
declare(strict_types=1);
function returnIntValue(int $value): int
{
return $value;
}
print(returnIntValue(5));
?>
瀏覽器將產(chǎn)生以下輸出-
5
示例 - 無效的返回類型
declare(strict_types=1);
function returnIntValue(int $value): int
{
return $value + 1.0;
}
print(returnIntValue(5));
?>
這將產(chǎn)生以下瀏覽器輸出 -
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned
PHP7 - Null合并運算符PHP7一個新的功能,空合并運算符(??)已經(jīng)推出。它是用來與isset()函數(shù)函數(shù)一起替換三元操作。如果存在且不是 NULL 空合并運算符返回它的第一個操作數(shù);否則返回第二個操作數(shù)。
示例
// fetch the value of $_GET["user"] and returns "not passed"
// if username is not passed
$username = $_GET["username"] ?? "not passed";
print($username);
print("
");
// 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);
?>
這將在瀏覽器產(chǎn)生以下輸出 -
not passed
not passed
not passed
在PHP7中有一個新的功能-飛船操作符相繼引入。它是用于比較兩個表達式。當(dāng)?shù)谝粋€表達式較第二個表達式分別小于,等于或大于時它分別返回-1,0或1。
示例
//integer comparison
print( 1 <=> 1);print("
");
print( 1 <=> 2);print("
");
print( 2 <=> 1);print("
");
print("
");
//float comparison
print( 1.5 <=> 1.5);print("
");
print( 1.5 <=> 2.5);print("
");
print( 2.5 <=> 1.5);print("
");
print("
");
//string comparison
print( "a" <=> "a");print("
");
print( "a" <=> "b");print("
");
print( "b" <=> "a");print("
");
?>
這將在瀏覽器產(chǎn)生以下輸出 -
0
-1
1
0
-1
1
0
-1
1
數(shù)組常量現(xiàn)在可以使用 define() 函數(shù)定義。在PHP5.6中,它們只能使用const關(guān)鍵字定義。
示例
//define a array using define function
define("animals", [
"dog",
"cat",
"bird"
]);
print(animals[1]);
?>
這將在瀏覽器產(chǎn)生以下輸出 -
cat
PHP7 - 匿名類PHP7 - 匿名類
匿名類現(xiàn)在可以使用 new class 來定義。匿名類可以使用來代替完整的類定義。
示例
interface 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) {
print($msg);
}
});
$app->getLogger()->log("My first Log Message");
?>
這將在瀏覽器產(chǎn)生以下輸出 -
My first Log Message
PHP7 - Closure::call()Closure::call() 方法加入到臨時綁定(bindTo)的對象范圍,以簡便方式封閉和調(diào)用它 它相比綁定到PHP5.6性能更快。
示例 - PHP7之前版本
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, "A");
print($value());
?>
這將在瀏覽器產(chǎn)生以下輸出 -
1
示例-PHP7+
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>
這將在瀏覽器產(chǎn)生以下輸出 -
1
PHP7- 過濾unserialize()PHP7引入了過濾 unserialize()函數(shù)以在反序列化不受信任的數(shù)據(jù)對象時提供更好的安全性。它可以防止可能的代碼注入,使開發(fā)人員能夠使用序列化白名單類。
示例
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->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("
");
print($data2->obj2prop);
?>
這將在瀏覽器產(chǎn)生以下輸出 -
1
2
在PHP7,新的 IntlChar 類添加其目的是公開更多的ICU功能。 這個類定義了許多可用于操縱Unicode字符的靜態(tài)方法和常數(shù)。你需要在使用這個類之前安裝 Intl 擴展。
示例
printf("%x", IntlChar::CODEPOINT_MAX);
print (IntlChar::charName("@"));
print(IntlChar::ispunct("!"));
?>
這將在瀏覽器產(chǎn)生以下輸出 -
10ffff
COMMERCIAL AT
true
在PHP7,以下兩個新的函數(shù)引入以產(chǎn)生一個跨平臺的方式加密安全整數(shù)和字符串。
random_bytes() - 生成加密安全偽隨機字節(jié)。 random_int() - 生成加密安全偽隨機整數(shù)。
random_bytes()
random_bytes()適合于使用來生成密碼,密碼學(xué)隨機的任意長度的字符串,如:生成 salt,密鑰或初始向量。
語法
string random_bytes ( int $length )
參數(shù)
length - 返回隨機串的字節(jié)長度
返回值
返回包含加密安全隨機字節(jié)的請求數(shù)量的字符串。
錯誤/異常
如果無法找到隨機性的適當(dāng)源,將引發(fā)異常 如果給定參數(shù)無效,TypeError將被拋出 如果給出字節(jié)長度無效,錯誤將被拋出
示例
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>
這將在瀏覽器產(chǎn)生以下輸出 -
54cc305593
random_int()
random_int()產(chǎn)生適合于用于結(jié)果是非常重要的加密隨機整數(shù)。
語法
int random_int ( int $min , int $max )
參數(shù)
min - 返回最小值,它必須是PHP_INT_MIN或更大的值 max - 返回最大值,它必須是小于或等于PHP_INT_MAX
返回值
返回最小值(min)到最大(max)的范圍內(nèi),包括加密安全隨機整數(shù)。
錯誤/異常
如果無法找到隨機性一個適當(dāng)?shù)脑?,將引發(fā)異常 如果給定參數(shù)無效,TypeError 將被拋出 如果 max 小于 min 時,錯誤將被拋出
示例
print(random_int(100, 999));
print("
");
print(random_int(-1000, 0));
?>
這將在瀏覽器產(chǎn)生以下輸出 -
614
-882
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/26238.html
摘要:風(fēng)格的構(gòu)造函數(shù)式構(gòu)造函數(shù),它與類的名稱相同,因為它們是在所定義類的方法,現(xiàn)在已過時,并且將在未來被移除。如果的構(gòu)造僅僅是一個類中定義構(gòu)造函數(shù),將發(fā)出。類實現(xiàn)構(gòu)造函數(shù)方法不受影響。 PHP7 - use語句 從PHP7起,單次使用 use 語句可以用來從同一個命名空間導(dǎo)入類,函數(shù)和常量(而不用多次使用 use 語句)。示例 PHP7 - 錯誤處理 從PHP7,錯誤處理和報告已經(jīng)改變。P...
摘要:順風(fēng)車運營研發(fā)團隊黃桃背景線上零星會出現(xiàn)進程及進程占用內(nèi)存超過限制等報警告,并且兩者報警的時間上往往都比較接近,如下原因分析時間上接近,那么出現(xiàn)兩者報警的原因有可能是相同的,登錄機器調(diào)試生成文件 順風(fēng)車運營研發(fā)團隊 黃桃 背景 線上零星會出現(xiàn)fpm進程coredump 及 fpm進程占用內(nèi)存超過限制等報警告,并且兩者報警的時間上往往都比較接近,如下: showImg(https://...
摘要:前期工作準備得差不多了,開始找這個的提交部分的內(nèi)容了,我們從登錄頁面應(yīng)該也可以知道我們需要提交學(xué)號密碼驗證碼這三個。差點忘了把發(fā)送郵件的截圖發(fā)出來 一、實現(xiàn)目的 本來就很喜歡逛圖書館,時不時去借本書(注:借的都沒看過),但我這個學(xué)期突然發(fā)現(xiàn)了問題,每本書都可以借兩個月,但不幸的是我最近一學(xué)期借的書全部超期,一天一毛錢,我心疼這錢?。。?!靈機一動,為什么不寫個腳本來通知自己圖書超期呢?說...
閱讀 3771·2021-11-11 10:58
閱讀 2563·2021-09-22 15:43
閱讀 2920·2019-08-30 15:44
閱讀 2292·2019-08-30 13:08
閱讀 1889·2019-08-29 17:28
閱讀 954·2019-08-29 10:54
閱讀 733·2019-08-26 11:46
閱讀 3558·2019-08-26 11:43