「PHP/Webアプリケーション向けの機能」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎match: PHPのmatchは、switchと似ていますが、文ではなく式なので値が取れるほか、比較には「厳密な比較」が使われます。 matchには、代替構文も埋込み構文もありません。
タグ: 2017年版ソースエディター
193 行
 
=== match ===
PHPのmatchは、switchと似ていますが、文ではなく式なので値取れるほか、比較には「[[#厳密な比較|厳密な比較]]」が使われます。
 
;コード例:<syntaxhighlight lang=php>
matchには、代替構文も埋込み構文もありません。
;[https://paiza.io/projects/hNIrTpNJmW_EozfBVP4HJQ?language=php 例]:<syntaxhighlight lang=php>
<?php
$s = "as";
echo match ($s) {
"abstract" => "KW_abstract",
"and" => "KW_and",
"as" => "KW_as",
default => "Unknown",
},
PHP_EOL;
?>
</syntaxhighlight>
:[[#switch]]の例と同じロジックです。簡素にかけていますが、
:;コード例連想配列を使った実装:<syntaxhighlight lang=php>
<?php
$s = "as";
$hash = [
"abstract" => "KW_abstract",
"and" => "KW_and",
"as" => "KW_as",
];
echo isset($hash[$s]) ? $hash[$s] : "Unknown", PHP_EOL;
?>
</syntaxhighlight>
:::と書いたほうがより簡素だと考えるひともいるでしょう。
::また、<code>=></code>の右には「式」が要求されるので、<code>echo</code>のようなコマンドは使えません。
:;埋込構文厳密でない比較の使用:<syntaxhighlight lang=php>
<?php
$age = 18;
echo "{$age}歳は",
match (true) {
$age < 1 => "乳児",
$age < 6 => "幼児",
$age < 18 => "少年",
default => "成人",
},
"です。",
PHP_EOL;
?></syntaxhighlight>
::こんな事もできます。
;基本構文:<syntaxhighlight lang=php>
</syntaxhighlight>
;代替構文:<syntaxhighlight lang=php>(ありません)
;埋込構文:(ありません)
</syntaxhighlight>
;埋込構文:<syntaxhighlight lang=php>
</syntaxhighlight>
 
 
== 2つの比較演算子 ==