var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
PHP7.1および7.2の新機能の詳細な例
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 番目のエラーは致命的なエラーを報告しました。 関数の戻り値が var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -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) { // ...}
[]
) の省略形と、指定されたキーの追加🎜🎜 を使用できます。リストをすばやく走査して配列内の値を取得します。 []
の省略形が使用できるようになりました。 🎜rrreee🎜さらに、この更新されたリストではインデックス配列のキーも指定できるようになり、非常に便利です。 🎜rrreee🎜この関数が利用できない前は、通常、while
+ each
を使用して、list
を使用してインデックス配列を走査していました。 🎜rrreee🎜< Strong>注: 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 型🎜🎜型名の前に疑問符 (?</code) を追加することで、パラメータと戻り値の型宣言を行うことができます。 >) を使用して null としてマークします。関数パラメータまたは戻り値の型が、指定された型または null であることを示します。 🎜🎜例を見てください: 🎜rrreee🎜印刷出力: 🎜rrreee🎜 上記と同じ: 3 番目のエラーは致命的なエラーを報告しました。 🎜🎜関数の戻り値が <code>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🎜< Strong>注: 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
