svn: /phpdoc/ja/trunk/language/ control-structures/match.xml control-structures.xml errors/php7.xml predefined/exceptions.xml predefined/unhandledmatcherror.xml

[email protected] (Yoshinari Takaoka)
Newsgroups php.doc.ja
Message-ID <[email protected]>
mumumu                                   Mon, 23 Nov 2020 00:10:25 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=351511

Log:
Add match expression documentation

This includes:
 - match expression page
 - UnhandledMatchError page

Co-authored-by: Larry Garfield <[email protected]>

Changed paths:
    A   phpdoc/ja/trunk/language/control-structures/match.xml
    U   phpdoc/ja/trunk/language/control-structures.xml
    U   phpdoc/ja/trunk/language/errors/php7.xml
    U   phpdoc/ja/trunk/language/predefined/exceptions.xml
    A   phpdoc/ja/trunk/language/predefined/unhandledmatcherror.xml
svn-diffs-351511.txt (text/x-diff, 13 KB)
Added: phpdoc/ja/trunk/language/control-structures/match.xml
===================================================================
--- phpdoc/ja/trunk/language/control-structures/match.xml	                        (rev 0)
+++ phpdoc/ja/trunk/language/control-structures/match.xml	2020-11-23 00:10:25 UTC (rev 351511)
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 351499 Maintainer: mumumu Status: ready -->
+
+<sect1 xml:id="control-structures.match" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <title><literal>match</literal></title>
+ <?phpdoc print-version-for="match"?>
+ <para>
+  <literal>match</literal> 式は、値の一致をチェックした結果に基づいて評価結果を分岐します。
+  <literal>switch</literal> 文と似ていますが、
+  <literal>match</literal> 式は複数の候補と比較される制約式を持ちます。
+  <literal>switch</literal> 文とは異なり、
+  三項演算子のように値を評価します。
+  <literal>switch</literal> 文とは異なり、
+  弱い比較(<code>==</code>)ではなく、
+  型と値の一致チェック(<code>===</code>) に基づいて行われます。
+  match 式は PHP 8.0.0 以降で利用可能です。
+ </para>
+
+ <example>
+  <title><literal>match</literal> 式の構造</title>
+  <programlisting role="php">
+<![CDATA[
+<?php
+$return_value = match (制約式) {
+    単一の条件式 => 返却式,
+    条件式1, 条件式2 => 返却式,
+};
+?>
+]]>
+  </programlisting>
+
+  <note>
+   <simpara>
+    <literal>match</literal> 式の結果は、必ずしも使う必要はありません。
+   </simpara>
+  </note>
+  <note>
+   <simpara>
+    <literal>match</literal> 式は、必ずセミコロン <literal>;</literal> で終わらなければなりません。
+   </simpara>
+  </note>
+ </example>
+
+ <para>
+  <literal>match</literal> 式は、
+  <literal>switch</literal> 文と似ていますが、いくつかの違いがあります:
+
+  <itemizedlist>
+   <listitem>
+    <simpara>
+     <literal>match</literal> 式の比較は、
+     switch 文が行う弱い比較ではなく、
+     厳密に値を比較(<code>===</code>) します。
+    </simpara>
+   </listitem>
+   <listitem>
+    <simpara>
+     <literal>match</literal> 式は値を返します。
+    </simpara>
+   </listitem>
+   <listitem>
+    <simpara>
+     <literal>match</literal> 式の分岐は、
+     <literal>switch</literal> 文のように後の分岐に抜けたりはしません。
+    </simpara>
+   </listitem>
+   <listitem>
+    <simpara>
+     <literal>match</literal> 式は、全ての場合を網羅していなければいけません。
+    </simpara>
+   </listitem>
+  </itemizedlist>
+ </para>
+
+ <para>
+  <literal>switch</literal> 文のように、
+  <literal>match</literal> 式はマッチさせる分岐をひとつひとつ実行します。
+  はじめは、コードは何も実行されません。
+  以前のすべての条件式が、制約式とマッチしなかった場合に条件式が実行されます。
+  条件式に一致する式が評価された場合に、返却式が評価されます。
+  たとえば、以下のようになります:
+  <informalexample>
+   <programlisting role="php">
+<![CDATA[
+<?php
+$result = match ($x) {
+    foo() => ...,
+    $this->bar() => ..., // foo() === $x でなければ bar() は呼び出されません。
+    $this->baz => beep(), // $x === $this->baz でなければ、beep() は呼び出されません。
+    // などなど
+};
+?>
+]]>
+   </programlisting>
+  </informalexample>
+ </para>
+
+ <para>
+  <literal>match</literal> 式の分岐は、複数の式をカンマ区切りで含めても構いません。
+  これは論理ORであり、複数の分岐の右辺を同じにする場合の短縮記法です。
+ </para>
+ <para>
+  <informalexample>
+   <programlisting role="php">
+<![CDATA[
+<?php
+$result = match ($x) {
+    // この分岐は:
+    $a, $b, $c => 5,
+    // 以下の3つの分岐と等しい:
+    $a => 5,
+    $b => 5,
+    $c => 5,
+};
+?>
+]]>
+   </programlisting>
+  </informalexample>
+ </para>
+ <para>
+  <literal>default</literal> パターンという特別な場合があります。
+  このパターンは前の分岐にマッチしなかったあらゆる場合にマッチします。
+  たとえば、以下のようになります:
+  <informalexample>
+   <programlisting role="php">
+<![CDATA[
+<?php
+$expressionResult = match ($condition) {
+    1, 2 => foo(),
+    3, 4 => bar(),
+    default => baz(),
+};
+?>
+]]>
+   </programlisting>
+  </informalexample>
+  <note>
+   <simpara>
+    複数の <literal>default</literal> パターンがあった場合、
+    <constant>E_FATAL_ERROR</constant> が発生します。
+   </simpara>
+  </note>
+ </para>
+
+ <para>
+  <literal>match</literal> 式は、全ての場合を網羅していなければいけません。
+  制約式がどの分岐でも処理できなかった場合、
+  <classname>UnhandledMatchError</classname> がスローされます。
+
+ </para>
+
+ <example>
+  <title>処理されない match 式の例</title>
+  <programlisting role="php">
+<![CDATA[
+<?php
+$condition = 5;
+
+try {
+    match ($condition) {
+        1, 2 => foo(),
+        3, 4 => bar(),
+    };
+} catch (\UnhandledMatchError $e) {
+    var_dump($e);
+}
+?>
+]]>
+  </programlisting>
+  &example.outputs;
+  <screen>
+<![CDATA[
+object(UnhandledMatchError)#1 (7) {
+  ["message":protected]=>
+  string(33) "Unhandled match value of type int"
+  ["string":"Error":private]=>
+  string(0) ""
+  ["code":protected]=>
+  int(0)
+  ["file":protected]=>
+  string(9) "/in/ICgGK"
+  ["line":protected]=>
+  int(6)
+  ["trace":"Error":private]=>
+  array(0) {
+  }
+  ["previous":"Error":private]=>
+  NULL
+}
+]]>
+  </screen>
+ </example>
+
+ <sect2>
+  <title>厳密な一致チェックを行わずに match 式を使う</title>
+  <para>
+   制約式に <code>true</code> を指定することで、
+   厳密な一致チェックを行わずに <literal>match</literal> 式を使うことができます。
+  </para>
+
+  <example>
+   <title>整数の範囲の応じてmatch式を分岐させる一般的な使い方</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+$age = 23;
+
+$result = match (true) {
+    $age >= 65 => 'senior',
+    $age >= 25 => 'adult',
+    $age >= 18 => 'young adult',
+    default => 'kid',
+}
+
+var_dump($result);
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+string(11) "young adult"
+]]>
+   </screen>
+  </example>
+
+  <example>
+   <title>文字列の内容に応じてmatch式を分岐させる一般的な使い方</title>
+   <programlisting role="php">
+<![CDATA[
+<?php
+
+$text = 'Bienvenue chez nous';
+
+$result = match (true) {
+    str_contains($text, 'Welcome') || str_contains($text, 'Hello') => 'en',
+    str_contains($text, 'Bienvenue') || str_contains($text, 'Bonjour') => 'fr',
+    // ...
+};
+
+var_dump($result);
+?>
+]]>
+   </programlisting>
+   &example.outputs;
+   <screen>
+<![CDATA[
+string(2) "fr"
+]]>
+   </screen>
+  </example>
+ </sect2>
+</sect1>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->


Property changes on: phpdoc/ja/trunk/language/control-structures/match.xml
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Modified: phpdoc/ja/trunk/language/control-structures.xml
===================================================================
--- phpdoc/ja/trunk/language/control-structures.xml	2020-11-22 23:49:25 UTC (rev 351510)
+++ phpdoc/ja/trunk/language/control-structures.xml	2020-11-23 00:10:25 UTC (rev 351511)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!-- $Revision$ -->
-<!-- EN-Revision: 349319 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: 351499 Maintainer: hirokawa Status: ready -->
 <!-- CREDITS: takagi,shimooka,mumumu -->
 <chapter xml:id="language.control-structures" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
  <title>制御構造</title>
@@ -45,6 +45,7 @@
  &language.control-structures.break;
  &language.control-structures.continue;
  &language.control-structures.switch;
+ &language.control-structures.match;
  &language.control-structures.declare;
  &language.control-structures.return;
  &language.control-structures.require;

Modified: phpdoc/ja/trunk/language/errors/php7.xml
===================================================================
--- phpdoc/ja/trunk/language/errors/php7.xml	2020-11-22 23:49:25 UTC (rev 351510)
+++ phpdoc/ja/trunk/language/errors/php7.xml	2020-11-23 00:10:25 UTC (rev 351511)
@@ -74,6 +74,9 @@
        <listitem>
         <simpara><classname>ValueError</classname></simpara>
        </listitem>
+       <listitem>
+        <simpara><classname>UnhandledMatchError</classname></simpara>
+       </listitem>
       </itemizedlist>
      </listitem>
      <listitem>

Modified: phpdoc/ja/trunk/language/predefined/exceptions.xml
===================================================================
--- phpdoc/ja/trunk/language/predefined/exceptions.xml	2020-11-22 23:49:25 UTC (rev 351510)
+++ phpdoc/ja/trunk/language/predefined/exceptions.xml	2020-11-23 00:10:25 UTC (rev 351511)
@@ -26,6 +26,7 @@
  &language.predefined.parseerror;
  &language.predefined.typeerror;
  &language.predefined.valueerror;
+ &language.predefined.unhandledmatcherror;
 </part>

 <!-- Keep this comment at the end of the file

Added: phpdoc/ja/trunk/language/predefined/unhandledmatcherror.xml
===================================================================
--- phpdoc/ja/trunk/language/predefined/unhandledmatcherror.xml	                        (rev 0)
+++ phpdoc/ja/trunk/language/predefined/unhandledmatcherror.xml	2020-11-23 00:10:25 UTC (rev 351511)
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 351499 Maintainer: mumumu Status: ready -->
+
+<phpdoc:exceptionref xml:id="class.unhandledmatcherror"
+ xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:phpdoc="http://php.net/ns/phpdoc">
+ <title>UnhandledMatchError</title>
+ <titleabbrev>UnhandledMatchError</titleabbrev>
+
+ <partintro>
+
+<!-- {{{ Error intro -->
+  <section xml:id="unhandledmatcherror.intro">
+   &reftitle.intro;
+   <para>
+    <ooclass><classname>UnhandledMatchError</classname></ooclass> は、
+    match 式がどの分岐でも処理できなかったことを検知した場合にスローされます。
+  </para>
+  </section>
+<!-- }}} -->
+
+  <section xml:id="unhandledmatcherror.synopsis">
+   &reftitle.classsynopsis;
+
+<!-- {{{ Synopsis -->
+   <classsynopsis>
+    <ooclass><classname>UnhandledMatchError</classname></ooclass>
+
+<!-- {{{ Class synopsis -->
+    <classsynopsisinfo>
+     <ooclass>
+      <classname>UnhandledMatchError</classname>
+     </ooclass>
+
+     <ooclass>
+      <modifier>extends</modifier>
+      <classname>Error</classname>
+     </ooclass>
+    </classsynopsisinfo>
+<!-- }}} -->
+
+    <classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
+    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))">
+     <xi:fallback />
+    </xi:include>
+
+    <classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
+    <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[1])" />
+   </classsynopsis>
+
+<!-- }}} -->
+
+  </section>
+ </partintro>
+</phpdoc:exceptionref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->


Property changes on: phpdoc/ja/trunk/language/predefined/unhandledmatcherror.xml
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.