php7.1の新機能
1. Null可能な型
型名(null)の前に疑問符(?
)を追加することで、パラメータと戻り値の型宣言をnullとしてマークできます。 )。関数パラメータまたは戻り値の型が、指定された型または null であることを示します。 ?
)来标记为空(null)。表明函数参数或者返回值的类型要么为指定类型,要么为 null。
看下例子:
function testReturn(?string $name){ return $name; } var_dump(testReturn('yangyi')); var_dump(testReturn(null)); var_dump(testReturn2());
打印输出:
$ php php71.phpstring(6) "yangyi"NULL PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14Stack trace:#0 php71.php(22): testReturn()#1 {main} thrown in php71.php on line 14
如上如:第三个报了一个致命的错误。
再来看下,函数返回值是Nullable
的情况:
function testReturn3() : ?string{ //return "abc"; //return null;} var_dump(testReturn3());
如果加了?
要么返回 string ,要么返回null。不能啥也不返还。会报错。
2.void返回类型
PHP7.0 添加了指定函数返回类型的特性,但是返回类型却不能指定为 void,7.1 的这个特性算是一个补充。定义返回类型为 void
的函数不能有返回值,即使返回 null 也不行:
function testReturn4() : void{ //1. 要么啥都不返还 ok //2. 要么只return; ok //return; //3. return null 也会报错 //return null; //4. return 4 会报错 //return 4;}
Fatal error: A void function must not return a value in /php71.php on line 70
还有就是,void 只能用于返回值,不能用于参数中。比如下面的会报错:
function testReturn6(void $a) : void{} var_dump(testReturn6());
PHP Fatal error: void cannot be used as a parameter type in php71.php on line 73
如果在类的继承中,申明为void返回类型的方法,子类要是继承重写,也只能返回void, 否则会触发错误:
<?php class Foo{ public function bar(): void { } }class Foobar extends Foo{ // 覆盖失败 public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void } }
所以,你必须这样,就不会报错:
class Foo{ public $a; public function bar(): void { $this->a = 2; } }class Foobar extends Foo{ // 覆盖成功 public function bar(): void { $this->a = 3; } }
3.list 的方括号([]
)简写以及增加指定key
可以用list 来快速遍历得到数组里面的值。现在可以用[]
简写了。
$data = [ [1, 'Tom'], [2, 'Fred'], ];// list() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0];// list() styleforeach ($data as list($id, $name)) { // logic here with $id and $name}// [] styleforeach ($data as [$id, $name]) { // logic here with $id and $name}
此外,此次更新的list,针对索引数组,还可以指定 key,这个升级非常棒,非常方便。
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];// list() stylelist("id" => $id1, "name" => $name1) = $data[0]; // [] style["id" => $id1, "name" => $name1] = $data[0]; // list() styleforeach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name } // [] styleforeach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name}
在这个功能没有之前,我们一般会用while
+ each
的方式来用list
遍历索引数组:
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];while (list($id, name) = each($data)) { echo "$key => $val\n"; }
注意:PHP 7.2 中已经将 each 函数移除了!所以,就不要用这种方式来遍历索引数组了
3.类常量可见范围设定
之前类里面额常量用const
申明,是没有可见属性的。现在把方法的可见属性移植了过来:
<?php class ConstDemo { // 常量默认为 public const PUBLIC_CONST = 0; // 可以自定义常量的可见范围 public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4; // 多个常量同时声明只能有一个属性 private const FOO = 1, BAR = 2; }
使用方法和类的方法一样。就不多详述了。
4.支持负的字符串偏移
有2个更新,1是字符串直接取,2是strpos函数第三个参数支持负数。表示从尾部取。
var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
string变量可以直接取值,不用通过变量名,是在php5.5加入的。现在可以从尾部取:
var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:evar_dump("abcdef"[2]); // 从前面取第2个,从0开始:c$string = 'bar';echo $string[1], $string[-1]; // a r
5.多条件 catch
在以往的 try … catch 语句中,每个 catch 只能设定一个条件判断:
try { // Some code...} catch (ExceptionType1 $e) { // 处理 ExceptionType1} catch (ExceptionType2 $e) { // 处理 ExceptionType2} catch (Exception $e) { // ...}
现在可以多个一起处理。用”|
” 分割。
try { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // 对于 ExceptionType1 和 ExceptionType2 的处理 } catch (Exception $e) { // ...}
php7.2
php 7.2大都是底层的更新,提高性能。没有太大常用语法层面的更新,这里就略过了。
之前写过php7.0以及老版本的php各大版本的跟新点以及新功能。今天看下php7.1和php7.2的新功能。
php7.1 新增功能
1.可为空(Nullable)类型
参数和返回值的类型声明可以通过在类型名称前添加一个问号(?
)来标记为空(null)。表明函数参数或者返回值的类型要么为指定类型,要么为 null。
看下例子:
function testReturn(?string $name){ return $name; } var_dump(testReturn('yangyi')); var_dump(testReturn(null)); var_dump(testReturn2());
打印输出:
$ php php71.phpstring(6) "yangyi"NULL PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14Stack trace:#0 php71.php(22): testReturn()#1 {main} thrown in php71.php on line 14
如上如:第三个报了一个致命的错误。
再来看下,函数返回值是Nullable
的情况:
function testReturn3() : ?string{ //return "abc"; //return null;} var_dump(testReturn3());
如果加了?
要么返回 string ,要么返回null。不能啥也不返还。会报错。
2.void返回类型
PHP7.0 添加了指定函数返回类型的特性,但是返回类型却不能指定为 void,7.1 的这个特性算是一个补充。定义返回类型为 void
的函数不能有返回值,即使返回 null 也不行:
function testReturn4() : void{ //1. 要么啥都不返还 ok //2. 要么只return; ok //return; //3. return null 也会报错 //return null; //4. return 4 会报错 //return 4;}
Fatal error: A void function must not return a value in /php71.php on line 70
还有就是,void 只能用于返回值,不能用于参数中。比如下面的会报错:
function testReturn6(void $a) : void{} var_dump(testReturn6());
PHP Fatal error: void cannot be used as a parameter type in php71.php on line 73
如果在类的继承中,申明为void返回类型的方法,子类要是继承重写,也只能返回void, 否则会触发错误:
<?php class Foo{ public function bar(): void { } }class Foobar extends Foo{ // 覆盖失败 public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void } }
所以,你必须这样,就不会报错:
class Foo{ public $a; public function bar(): void { $this->a = 2; } }class Foobar extends Foo{ // 覆盖成功 public function bar(): void { $this->a = 3; } }
3.list 的方括号([]
)简写以及增加指定key
可以用list 来快速遍历得到数组里面的值。现在可以用[]
简写了。
$data = [ [1, 'Tom'], [2, 'Fred'], ];// list() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0]; // list() styleforeach ($data as list($id, $name)) { // logic here with $id and $name} // [] styleforeach ($data as [$id, $name]) { // logic here with $id and $name}
此外,此次更新的list,针对索引数组,还可以指定 key,这个升级非常棒,非常方便。
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];// list() stylelist("id" => $id1, "name" => $name1) = $data[0]; // [] style["id" => $id1, "name" => $name1] = $data[0]; // list() styleforeach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name}// [] styleforeach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name}
在这个功能没有之前,我们一般会用while
+ each
的方式来用list
遍历索引数组:
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];while (list($id, name) = each($data)) { echo "$key => $val\n"; }
注意:PHP 7.2 中已经将 each 函数移除了!所以,就不要用这种方式来遍历索引数组了
3.类常量可见范围设定
之前类里面额常量用const
<?php class ConstDemo { // 常量默认为 public const PUBLIC_CONST = 0; // 可以自定义常量的可见范围 public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4; // 多个常量同时声明只能有一个属性 private const FOO = 1, BAR = 2; }印刷出力:
var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
上記と同じ: 3 番目のエラーは致命的なエラーを報告しました。 関数の戻り値が Nullable
の場合を見てみましょう: 🎜var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:evar_dump("abcdef"[2]); // 从前面取第2个,从0开始:c$string = 'bar';echo $string[1], $string[-1]; // a r🎜
?
が追加されると、文字列または null が返されます。何も返すことはできません。エラーが報告されます。 🎜🎜2.void return type🎜🎜PHP7.0では関数の戻り値の型を指定する機能が追加されましたが、戻り値の型をvoidに指定することはできません。7.1のこの機能は補足です。 void
の戻り値の型で定義された関数は、null を返す場合でも戻り値を持つことができません: 🎜try { // Some code...} catch (ExceptionType1 $e) { // 处理 ExceptionType1} catch (ExceptionType2 $e) { // 处理 ExceptionType2} catch (Exception $e) { // ...}
try { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // 对于 ExceptionType1 和 ExceptionType2 的处理 } catch (Exception $e) { // ...}🎜 また、void は戻り値にのみ使用でき、パラメーターには使用できません。たとえば、次のエラーが報告されます: 🎜rrreeerrreee🎜 メソッドがクラスの継承で void 戻り値の型として宣言されている場合、サブクラスがそれを継承してオーバーライドすると、メソッドは void のみを返すことができ、それ以外の場合はエラーがトリガーされます。 : 🎜rrreee🎜 したがって、これを実行する必要があります。エラーは報告されません: 🎜rrreee🎜3. リストの角括弧 (
[]
) の省略形と、指定されたキーの追加🎜🎜 を使用できます。リストをすばやく走査して配列内の値を取得します。 []
の省略形が使用できるようになりました。 🎜rrreee🎜さらに、この更新されたリストではインデックス配列のキーも指定できるようになり、非常に便利です。 🎜rrreee🎜この関数が利用できない前は、通常、while
+ each
を使用して、list
を使用してインデックス配列を走査していました。 🎜rrreee🎜注: each 関数は PHP 7.2 で削除されました。したがって、 インデックス配列を走査するためにこのメソッドを使用しないでください🎜🎜3. クラス定数の可視範囲設定🎜🎜以前は、クラス内の定数は const
で宣言されており、可視属性はありませんでした。 。これで、メソッドの表示可能な属性が移植されました: 🎜rrreee🎜使用方法はクラスのメソッドと同じです。詳細は不要です。 🎜🎜4. 負の文字列オフセットをサポート🎜🎜 2 つの更新があります。1 つは文字列を直接取得すること、2 は strpos 関数の 3 番目のパラメーターが負の数値をサポートすることです。尻尾から取ることを示します。 🎜rrreee🎜文字列変数は変数名を使わずに直接値を取得できるようになり、php5.5で追加されました。 🎜rrreee🎜 5. 複数条件の catch🎜🎜 前の try...catch ステートメントでは、各 catch は 1 つの条件判定のみを設定できます: 🎜rrreee🎜 これで、複数の条件を一緒に処理できるようになります。 「|
」で分割します。 🎜rrreeephp7.2
🎜php 7.2 は主に、パフォーマンスを向上させるための最下位レベルのアップデートです。共通構文レベルの更新はそれほど多くないため、ここでは省略します。 🎜🎜php7.0以前のバージョンのphpの新機能や新機能については以前書きました。今日はphp7.1とphp7.2の新機能を見ていきます。 🎜php7.1 の新機能
🎜1. Nullable 型🎜🎜型名の前に疑問符 (?
) を追加することで、パラメータと戻り値の型宣言を行うことができます。 >) を使用して null としてマークします。関数パラメータまたは戻り値の型が、指定された型または null であることを示します。 🎜🎜例を見てください: 🎜rrreee🎜印刷出力: 🎜rrreee🎜 上記と同じ: 3 番目のエラーは致命的なエラーを報告しました。 🎜🎜関数の戻り値が Nullable
の場合を見てみましょう: 🎜rrreee🎜 ?
が追加されると、文字列または null が返されます。何も返すことはできません。エラーが報告されます。 🎜🎜2.void return type🎜🎜PHP7.0では関数の戻り値の型を指定する機能が追加されましたが、戻り値の型をvoidに指定することはできません。7.1のこの機能は補足です。 void
の戻り値の型で定義された関数は、null を返す場合でも戻り値を持つことができません: 🎜rrreeerrreee🎜 また、void は戻り値にのみ使用でき、パラメーターには使用できません。たとえば、次のエラーが報告されます: 🎜rrreeerrreee🎜 メソッドがクラスの継承で void 戻り値の型として宣言されている場合、サブクラスがそれを継承してオーバーライドすると、メソッドは void のみを返すことができ、それ以外の場合はエラーがトリガーされます。 : 🎜rrreee🎜 したがって、これを実行する必要があります。エラーは報告されません: 🎜rrreee🎜3. リストの角括弧 ([]
) の省略形と、指定されたキーの追加🎜🎜 を使用できます。リストをすばやく走査して配列内の値を取得します。 []
の省略形が使用できるようになりました。 🎜rrreee🎜さらに、この更新されたリストでは、インデックス配列のキーも指定できます。このアップグレードは素晴らしく、非常に便利です。 🎜rrreee🎜この関数が利用できない前は、通常、while
+ each
を使用して、list
を使用してインデックス配列を走査していました。 🎜rrreee🎜注: each 関数は PHP 7.2 で削除されました。したがって、 インデックス配列を走査するためにこのメソッドを使用しないでください🎜🎜3. クラス定数の可視範囲設定🎜🎜以前は、クラス内の定数は const
で宣言されており、可視属性はありませんでした。 。これで、メソッドの表示可能な属性が移植されました: 🎜rrreee🎜使用方法はクラスのメソッドと同じです。詳細には立ち入りません。 🎜🎜4. 負の文字列オフセットをサポート🎜🎜 2 つの更新があります。1 つは文字列を直接取得すること、2 は strpos 関数の 3 番目のパラメーターが負の数値をサポートすることです。尻尾から取ることを示します。 🎜var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
string变量可以直接取值,不用通过变量名,是在php5.5加入的。现在可以从尾部取:
var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:evar_dump("abcdef"[2]); // 从前面取第2个,从0开始:c$string = 'bar';echo $string[1], $string[-1]; // a r
5.多条件 catch
在以往的 try … catch 语句中,每个 catch 只能设定一个条件判断:
try { // Some code...} catch (ExceptionType1 $e) { // 处理 ExceptionType1} catch (ExceptionType2 $e) { // 处理 ExceptionType2} catch (Exception $e) { // ...}
现在可以多个一起处理。用”|
” 分割。
try { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // 对于 ExceptionType1 和 ExceptionType2 的处理 } catch (Exception $e) { // ...}
php7.2
php 7.2大都是底层的更新,提高性能。没有太大常用语法层面的更新,这里就略过了。
相关推荐:
以上がPHP7.1および7.2の新機能の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

ホットトピック









