php7の新機能を見てみましょう
1. PHP スカラー型と戻り値の型宣言
2. PHP NULL 合体演算子
3. PHP 宇宙船操作演算子 (組み合わせ比較演算子)
4、PHP 定数配列
5、PHP 匿名クラス
6、PHP Closure::call()
7 、PHPフィルター unserialize()
8、PHP IntlChar()
9、PHP CSPRNG
10、PHP 7 例外
11、PHP 7 use ステートメント
12、PHP 7 エラー処理
13、PHP intp() 関数
14、PHP 7 セッション オプション
15、PHP 7 の非推奨の機能
16. PHP 7 で削除された拡張機能
##17. PHP 7 で削除された SAPI#PHP スカラー型と戻り値の型宣言
- スカラー型宣言
-
強制モード
##
declare(strict_types=1) <?php // 强制模式 function sum(int ...$ints) { return array_sum($ints); } print(sum(2, '3', 4.1)); ?> 以上程序执行输出结果为: 9复制代码
ログイン後にコピー
- 厳密モード
#
PHP NULL 合体演算子<?php declare(strict_types=1); function sum(int ...$ints) { return array_sum($ints); } print(sum(2, '3', 4.1)); ?> 以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为: PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
ログイン後にコピー
$site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
- #現在のマージ演算子
$site = $_GET['site'] ?? '菜鸟教程';复制代码
- #上記の 2 つのメソッドは同じです
- 次に例を示します。
-
<?php // 获取 $_GET['site'] 的值,如果不存在返回 '高压锅'$site = $_GET['site'] ?? '高压锅';print($site);print(PHP_EOL); // PHP_EOL 为换行符 // 以上代码等价于$site = isset($_GET['site']) ? $_GET['site'] : '高压锅';print($site);print(PHP_EOL); // ?? 链$site = $_GET['site'] ?? $_POST['site'] ?? '高压锅';print($site); ?>复制代码
ログイン後にコピー結合比較演算子 (別名 spaceship 演算子)
- PHP 7 で新たに追加された spaceship 演算子 (結合比較演算子) は、2 つの式 $ を比較するために使用されます。 a と $b。$a が $b より小さい場合、$b より大きい場合、または $b より大きい場合は、それぞれ -1、0、または 1 を返します。
<?php // 整型比较print( 1 <=> 1);print(PHP_EOL);print( 1 <=> 2);print(PHP_EOL);print( 2 <=> 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符 // 浮点型比较print( 1.5 <=> 1.5);print(PHP_EOL);print( 1.5 <=> 2.5);print(PHP_EOL);print( 2.5 <=> 1.5);print(PHP_EOL);print(PHP_EOL); // 字符串比较print( "a" <=> "a");print(PHP_EOL);print( "a" <=> "b");print(PHP_EOL);print( "b" <=> "a");print(PHP_EOL); ?>复制代码
以上结果分别为复制代码
0 -1 1 0 -1 1 0 -1 1复制代码
PHP 定数配列
以前に定義された定数配列には # のみを含めることができます## const次に、定数配列を定義するには、;
- define()
- ;
を使用します。
以下は例です: -
PHP 匿名クラス
// 使用 define 函数来定义数组 define('sites', [ 'Google', 'Runoob', 'Taobao']);print(sites[1]); ?> 以上程序执行输出结果为: Runoob复制代码
ログイン後にコピー
以下は例です:
<?php 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; // 使用 new class 创建匿名类 $app->setLogger(new class implements Logger { public function log(string $msg) { print($msg); } }); $app->getLogger()->log("我的第一条日志"); ?> 以上程序执行输出结果为: 我的第一条日志复制代码
Closure::call()
はパフォーマンスが向上し、クロージャー関数を新しいオブジェクト インスタンスに動的にバインドし、その関数を呼び出します。实例
<?php
class A {
private $x = 1;
}
// PHP 7 之前版本定义闭包函数代码
$getXCB = function() {
return $this->x;
};
// 闭包函数绑定到类 A 上
$getX = $getXCB->bindTo(new A, 'A');
echo $getX();
print(PHP_EOL);
// PHP 7+ 代码
$getX = function() {
return $this->x;
};
echo $getX->call(new A);
?>
以上程序执行输出结果为:
1
1复制代码
ログイン後にコピー
PHP フィルター unserialize()实例 <?php class A { private $x = 1; } // PHP 7 之前版本定义闭包函数代码 $getXCB = function() { return $this->x; }; // 闭包函数绑定到类 A 上 $getX = $getXCB->bindTo(new A, 'A'); echo $getX(); print(PHP_EOL); // PHP 7+ 代码 $getX = function() { return $this->x; }; echo $getX->call(new A); ?> 以上程序执行输出结果为: 1 1复制代码
-
のフィルター処理を提供できる機能が追加されました。不正なデータのコードインジェクションを防ぎ、より安全な逆シリアル化されたデータを提供できます。PHP 7 には、
unserialize()
实例
<?php
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);
// 默认行为是接收所有类
// 第二个参数可以忽略
// 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
print($data->obj1prop);
print(PHP_EOL);
print($data2->obj2prop);
?>
以上程序执行输出结果为:
1
2复制代码
ログイン後にコピー
实例 <?php 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); // 默认行为是接收所有类 // 第二个参数可以忽略 // 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象 $data = unserialize($serializedObj1 , ["allowed_classes" => true]); // 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2 $data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); print($data->obj1prop); print(PHP_EOL); print($data2->obj2prop); ?> 以上程序执行输出结果为: 1 2复制代码
- 上記の機能は
unserialize()
であることに注意してください。追加のパラメーター選択がある
allowed_classes
PHP 7 は、いくつかの CSPRNG 関数を導入することにより、暗号的に強力な乱数を生成するためのシンプルなメカニズムを提供します。PHP CSPRNG 擬似乱数ジェネレーター
CSPRNG (Cryptographically Secure Pseudo-Random Number Generator、擬似乱数ジェネレーター)。
random_bytes() - 暗号的に保護された擬似ランダム文字列。
random_int() - 暗号的に保護された擬似乱数整数。
および 'mt_rand()' と似ていますが、random_bytes() がランダムな文字列を生成する点が異なります。要約すると、これは元の
rand()
php7 例外
関数の下位互換性と拡張のために使用されます。これにより、運用環境でゼロコストのアサーションが可能になり、カスタム例外やエラーをスローする機能が提供されます。PHP 7 の例外は、古い
assert()
assert() は、評価対象の文字列やテスト対象のブール値だけでなく、最初の引数を式にすることができる言語構造になりました。
- パラメータの種類もあります
設定項目
デフォルト値
assert()的应用 跟assert_option() 配合复制代码
オプション値
#zend.assertions | 1 | 1. コードの生成と実行 (開発モード) | 0. コードを生成しますが、実行中はスキップします
---|---|---|
assert.Exception | 0 | 1. アサーションが失敗した場合にスローされる、例外オブジェクトがスローされる可能性があります。例外が提供されない場合は、AssertionError オブジェクト インスタンスがスローされます。 0 . Throwable を使用または生成します。オブジェクトをスローするのではなく、オブジェクトに基づいて警告を生成するだけです (PHP 5 と互換性があります) |