com doc/ja: Refactor OO section part 2: language/oop5/abstract.xml language/oop5/autoload.xml language/oop5/basic.xml language/oop5/cloning.xml
language/oop5/decon.xml language/oop5/final.xml language/oop5/inheritance.xml language/oop5/interfaces.xml language/oop5/late-static-bindings.xml
language/oop5/magic.xml language/oop5/overloading.xml language/oop5/properties.xml language/oop5/serialization.xml language/oop5/static.xml
language/oop5/traits

From: Date: Fri, 05 Mar 2021 15:24:19 +0000
Subject: com doc/ja: Refactor OO section part 2: language/oop5/abstract.xml language/oop5/autoload.xml language/oop5/basic.xml language/oop5/cloning.xml
language/oop5/decon.xml language/oop5/final.xml language/oop5/inheritance.xml language/oop5/interfaces.xml language/oop5/late-static-bindings.xml
language/oop5/magic.xml language/oop5/overloading.xml language/oop5/properties.xml language/oop5/serialization.xml language/oop5/static.xml
language/oop5/traits
Groups: php.doc.ja 
Request: Send a blank email to doc-ja+get-6235@lists.php.net to get a copy of this message
Commit: e3aa32c34bea82b501adf4abfaf9147902b0eb2b Author: Yoshinari Takaoka <mumumu@mumumu.org> Sat, 6 Mar 2021 00:24:19 +0900 Parents: 4b9fe5efee6d2f9057e4dde7cadb4b0ad8b3841d Branches: master Link: http://git.php.net/?p=doc/ja.git;a=commitdiff;h=e3aa32c34bea82b501adf4abfaf9147902b0eb2b Log: Refactor OO section part 2 Some misses from the first time Signed-off-by: Larry Garfield <larry@garfieldtech.com> Closes GH-329 Changed paths: M language/oop5/abstract.xml M language/oop5/autoload.xml M language/oop5/basic.xml M language/oop5/cloning.xml M language/oop5/decon.xml M language/oop5/final.xml M language/oop5/inheritance.xml M language/oop5/interfaces.xml M language/oop5/late-static-bindings.xml M language/oop5/magic.xml M language/oop5/overloading.xml M language/oop5/properties.xml M language/oop5/serialization.xml M language/oop5/static.xml M language/oop5/traits.xml M language/oop5/visibility.xml

diff --git a/language/oop5/abstract.xml b/language/oop5/abstract.xml index c586273cda..85a031eaba 100644 --- a/language/oop5/abstract.xml +++ b/language/oop5/abstract.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- CREDITS: shimooka --> <sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook"> @@ -17,16 +17,8 @@ <para> 抽象クラスから継承する際、親クラスの宣言で abstract としてマークされた 全てのメソッドは、子クラスで定義されなければなりません。加えて、 - これらのメソッドは同等 (あるいはより緩い制約) の - <link linkend="language.oop5.visibility">可視性</link> - で定義される必要があります。例えば、抽象メソッドが protected - として定義された場合、その関数の実装は protected または public - のどちらかとして定義する必要があります。private にすることはできません。 - さらに、メソッドのシグネチャも必ず一致していなくてはなりません。 - すなわち、型ヒントや必須引数の数についても同じでなければならないということです。 - たとえば、子クラスでオプションの引数を定義しているけれども - 抽象クラスのメソッドのシグネチャでは定義されていないという場合、 - シグネチャの衝突は発生しません。 + <link linkend="language.oop5.inheritance">オブジェクトの継承</link> と + <link linkend="language.oop.lsp">シグネチャの互換性に関するルール</link> に従わなければいけません。 </para> <example> @@ -132,9 +124,6 @@ Mrs. Pacwoman </screen> </example> - <para> - 'abstract' という名前のユーザー定義クラスや関数を含まないコードは、修正なしに動作します。 - </para> </sect1> <!-- Keep this comment at the end of the file diff --git a/language/oop5/autoload.xml b/language/oop5/autoload.xml index feda2ea2ad..679ec72e7c 100644 --- a/language/oop5/autoload.xml +++ b/language/oop5/autoload.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 99b8716337e2c27b6addf7e184b8ac7a50bb38b0 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- Credits: mumumu --> <sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook"> @@ -18,24 +18,18 @@ オートローダーを登録すれば、PHPがエラーで止まる前にクラスをロードする最後の チャンスが与えられます。 </para> - <tip> - <para> - <function>__autoload</function> 関数でもクラスやインターフェイスのオートロードができますが、 - <function>spl_autoload_register</function> 関数を使うことをおすすめします。 - こちらのほうが、より柔軟に使えるからです - (任意の数のオートローダーを登録して、サードパーティのライブラリなどに対応することもできます)。 - このため、<function>__autoload</function> の使用は - PHP 7.2.0 以降、非推奨となり、削除されます。 - </para> - </tip> - <note> - <para> - クラス名をたとえば <function>call_user_func</function> などで使用する場合、 - <literal>../</literal> のような危険な文字が含まれることもあり得ます。 - このような関数にはユーザーの入力を渡さないことをおすすめします。 - あるいは最低限 <function>__autoload</function> の中で入力内容を検証するようにします。 - </para> - </note> + + <caution> + <para> + PHP 8.0.0 より前のバージョンでは、 + <function>__autoload</function> 関数でもクラスやインターフェイスのオートロードが可能でした。 + しかし、この関数は + <function>spl_autoload_register</function> 関数に比べると柔軟性という点で劣っています。 + そのため、<function>__autoload</function> + 関数は PHP 7.2.0 で推奨されなくなり、 + PHP 8.0.0 で削除されました。 + </para> + </caution> <para> <example> <title>オートロードの例</title> diff --git a/language/oop5/basic.xml b/language/oop5/basic.xml index 54654fcb72..12b1c0013d 100644 --- a/language/oop5/basic.xml +++ b/language/oop5/basic.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 02f3bf57175c48abff767ad2c0961c6cfe58a39e Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,mumumu --> <sect1 xml:id="language.oop5.basic" xmlns="http://docbook.org/ns/docbook"> @@ -564,10 +564,9 @@ Stack trace: <para> <literal>class</literal> キーワードでもクラス名の解決を行うことが出来ます。 - <literal>ClassName</literal> クラスの完全修飾名を文字列で取得するには、 - <literal>ClassName::class</literal> とします。 - これは、<link linkend="language.namespaces"> - 名前空間</link>つきのクラスと組み合わせると特に便利です。 + クラスの名前が <literal>ClassName</literal> になっているクラスの完全修飾名を取得するには、 + <literal>ClassName::class</literal> を使います。 + これは、<link linkend="language.namespaces">名前空間</link>付きのクラスに使うと特に便利です。 </para> <para> <example xml:id="language.oop5.basic.class.class.name"> diff --git a/language/oop5/cloning.xml b/language/oop5/cloning.xml index 426aecdadf..ac84e651fc 100644 --- a/language/oop5/cloning.xml +++ b/language/oop5/cloning.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- Credits: mumumu --> <sect1 xml:id="language.oop5.cloning" xmlns="http://docbook.org/ns/docbook"> @@ -25,7 +25,6 @@ <para> オブジェクトのコピーは、<emphasis>clone</emphasis> キーワード (これは、そのオブジェクトの <link linkend="object.clone">__clone()</link> メソッドがある場合にこれをコールします)により作成されます。 - オブジェクトの <link linkend="object.clone">__clone()</link> メソッドを直接コールすることはできません。 </para> <informalexample> diff --git a/language/oop5/decon.xml b/language/oop5/decon.xml index 1960f6f3bb..6dabd719e0 100644 --- a/language/oop5/decon.xml +++ b/language/oop5/decon.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 4317fec7555dd42621f88162cc5068092e5c5cfb Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- CREDITS: shimooka,mumumu --> <sect1 xml:id="language.oop5.decon" xmlns="http://docbook.org/ns/docbook"> @@ -170,8 +170,8 @@ class Point { </note> <note> <para> - <!-- This should be linked once attributes are documented. --> - 昇格したコンストラクタの引数に指定されたアトリビュートは、 + 昇格したコンストラクタの引数に指定された + <link linkend="language.attributes">アトリビュート</link> は、 プロパティと引数の両方にコピーされます。 </para> </note> @@ -210,7 +210,7 @@ class Product { } public static function fromXml(string $xml): static { - // Put your own logic here. + // Custom logic here. $data = convert_xml_to_array($xml); $new = new static(); $new->id = $data['id']; diff --git a/language/oop5/final.xml b/language/oop5/final.xml index 2c49bcb23e..4a5c697e0b 100644 --- a/language/oop5/final.xml +++ b/language/oop5/final.xml @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook"> <title>finalキーワード</title> <para> - キーワード <emphasis>final</emphasis> + キーワード <literal>final</literal> を前に付けて定義されたメソッドは、子クラスから上書きできません。 クラス自体がfinalと定義された場合には、このクラスを拡張することはできません。 </para> @@ -47,7 +47,7 @@ final class BaseClass { echo "BaseClass::test() called\n"; } - // Here it doesn't matter if you specify the function as final or not + // As the class is already final, the final keyword is redundant final public function moreTesting() { echo "BaseClass::moreTesting() called\n"; } diff --git a/language/oop5/inheritance.xml b/language/oop5/inheritance.xml index ef09777a3c..4c258d37fd 100644 --- a/language/oop5/inheritance.xml +++ b/language/oop5/inheritance.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: be8c27a5f315a5e91bdd5f39a951c7759c143567 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <sect1 xml:id="language.oop5.inheritance" xmlns="http://docbook.org/ns/docbook"> <title>オブジェクトの継承</title> <para> @@ -10,7 +10,7 @@ </para> <para> 例えば、クラスを拡張するとき、サブクラスは親クラスから - public と、protected のメソッドをすべてを引き継ぎます。 + public と、protected のメソッドや、プロパティや定数をすべて引き継ぎます。 (子の)クラスが親のメソッドを上書きしない限り、 親のメソッドの機能が保持されます。 </para> @@ -19,6 +19,17 @@ また、同じようなオブジェクトに機能を追加する際に、 共通機能を再実装する必要がなくなります。 </para> + <para> + メソッドやプロパティ、そして定数の + <link linkend="language.oop5.visibility">アクセス権</link> + に関するルールは、子クラスで緩めることが可能です。 + たとえば、 + 親クラスで <literal>protected</literal> なメソッドは + 子クラスで <literal>public</literal> としてマークできます。 + しかし、厳しくすることはできません。 + つまり、親クラスで <literal>public</literal> なプロパティを + 子クラスで <literal>private</literal> にすることはできません。 + </para> <note> <para> diff --git a/language/oop5/interfaces.xml b/language/oop5/interfaces.xml index 3fd0471413..3997e17a21 100644 --- a/language/oop5/interfaces.xml +++ b/language/oop5/interfaces.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 4317fec7555dd42621f88162cc5068092e5c5cfb Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- CREDITS: shimooka,takagi,mumumu --> <sect1 xml:id="language.oop5.interfaces" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> @@ -19,12 +19,17 @@ インターフェイス内で宣言される全てのメソッドはpublicである必要があります。 これは、インターフェイスの特性によります。 </para> - <para> - <link - linkend="language.oop5.decon.constructor">コンストラクタ</link> - をインターフェイスで宣言できることに注意して下さい。 - これはたとえばファクトリで使う場合など、コンテクストによっては役に立ちます。 - </para> + + <note> + <para> + <link + linkend="language.oop5.decon.constructor">コンストラクタ</link> のような + <link linkend="language.oop5.magic">マジックメソッド</link> を + をインターフェイスで宣言できることに注意して下さい。 + これはたとえばファクトリで使う場合など、コンテクストによっては役に立ちます。 + </para> + </note> + <sect2 xml:id="language.oop5.interfaces.implements"> <title><literal>implements</literal></title> <para> diff --git a/language/oop5/late-static-bindings.xml b/language/oop5/late-static-bindings.xml index 15470466db..f9cab5aff2 100644 --- a/language/oop5/late-static-bindings.xml +++ b/language/oop5/late-static-bindings.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> + <sect1 xml:id="language.oop5.late-static-bindings" xmlns="http://docbook.org/ns/docbook"> <title>遅延静的束縛 (Late Static Bindings)</title> <para> diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml index 44a68944ed..cb0e48af01 100644 --- a/language/oop5/magic.xml +++ b/language/oop5/magic.xml @@ -1,12 +1,26 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- CREDITS: shimooka,mumumu --> <sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook"> <title>マジックメソッド</title> <para> - 以下の関数名 + マジックメソッドは、 + ある動作がオブジェクトに対して行われた場合に、 + PHP のデフォルトの動作を上書きする特別なメソッドです。 + </para> + <caution> + <simpara> + <literal>__</literal> で始まる全てのメソッドは、 + PHP によって予約されています。 + よって、PHP の動作を上書きするのでなければ、 + このようなメソッド名を使うことは推奨されません。 + </simpara> + </caution> + <para> + 以下の関数名は、マジックメソッドと見なされます: + <!-- Should be an itemized list ? --> <link linkend="object.construct">__construct()</link>, <link linkend="object.destruct">__destruct()</link>, <link linkend="object.call">__call()</link>, @@ -22,29 +36,37 @@ <link linkend="object.tostring">__toString()</link>, <link linkend="object.invoke">__invoke()</link>, <link linkend="object.set-state">__set_state()</link>, - <link linkend="object.clone">__clone()</link> および + <link linkend="object.clone">__clone()</link>, <link linkend="object.debuginfo">__debugInfo()</link> - は、PHP クラスにおける特殊関数の名前です。 - これらの関数に関連する特別な機能を使用する場合を除き、 - クラス内にこれらの名前を有する関数を作成してはいけません。 </para> - <note> - <simpara> - 全てのマジックメソッドは - <literal>public</literal> として宣言されていなければ - <emphasis>なりません</emphasis> - </simpara> - </note> - - <caution> - <simpara> - PHP は、__ で始まる関数名を特殊関数として予約しています。 - このページに記載されているような特殊な機能を必要としない限り、 - 関数名を __ で始めないことを推奨します。 - </simpara> - </caution> - + <warning> + <!-- See for a code example of this behaviour: https://3v4l.org/Bov34 --> + <simpara> + <link linkend="object.construct">__construct()</link>, + <link linkend="object.destruct">__destruct()</link>, + <link linkend="object.clone">__clone()</link> を除く全てのマジックメソッドは、 + <literal>public</literal> として宣言しなければいけません。 + そうしないと、 + <constant>E_WARNING</constant> レベルの警告が発生します。 + PHP 8.0.0 より前のバージョンでは、 + <link linkend="object.sleep">__sleep()</link>, + <link linkend="object.wakeup">__wakeup()</link>, + <link linkend="object.serialize">__serialize()</link>, + <link linkend="object.unserialize">__unserialize()</link>, + <link linkend="object.set-state">__set_state()</link> については、エラーは発生していませんでした。 + </simpara> + </warning> + <warning> + <para> + マジックメソッドの定義で型宣言が使われている場合、 + それらは、このマニュアルで説明しているシグネチャと同じでなければいけません。 + そうでない場合、致命的なエラーが発生します。 + PHP 8.0.0 より前のバージョンでは、 + エラーは全く発生していませんでした。 + </para> + </warning> + <sect2 xml:id="language.oop5.magic.sleep"> <title> <link linkend="object.sleep">__sleep()</link> と @@ -75,8 +97,7 @@ <link linkend="object.sleep">__sleep()</link> で、親クラスの private プロパティの名前を返すことはできません。 そうしようとすると <constant>E_NOTICE</constant> レベルのエラーとなります。 - この場合は、かわりに <classname>Serializable</classname> - インターフェイスを使います。 + この場合は、<link linkend="object.serialize">__serialize()</link> を代わりに使って下さい。 </para> </note> <para> @@ -250,10 +271,24 @@ class Connection <link linkend="object.tostring">__toString()</link> メソッドにより、 クラスが文字列に変換される際の動作を決めることができます。たとえば <literal>echo $obj;</literal> としたときに何を表示させるかといったことです。 - このメソッドは文字列を返さなければなりません。それ以外の場合は - <constant>E_RECOVERABLE_ERROR</constant> - レベルの致命的なエラーが発生します。 </para> + <warning> + <para> + PHP 8.0.0 以降では、戻り値は PHP で標準的な型のセマンティクスに従います。 + つまり、<link linkend="language.types.declarations.strict">厳密な型付け</link> + が無効になっている場合、可能であれば文字列型に強制されます。 + </para> + <para> + PHP 7.4 では、戻り値は文字列でなければいけません。 + そうでない場合、<classname>Error</classname> がスローされます。 + </para> + <para> + PHP 7.4.0 より前のバージョンでは、 + 戻り値は文字列でなければいけません。 + そうでない場合、<constant>E_RECOVERABLE_ERROR</constant> が発生します。 + </para> + </warning> + <warning> <simpara> PHP 7.4.0 より前のバージョンでは、<link linkend="object.tostring">__toString()</link> メソッド内から例外を投げることはできません。そうした場合、致命的なエラーが発生します。 @@ -344,7 +379,7 @@ bool(true) </para> <para> このメソッドの唯一のパラメータは、エクスポートされたプロパティを - <literal>array('property' => value, ...)</literal> の形式で保持する配列です。 + <literal>['property' => value, ...]</literal> の形式で保持する配列です。 </para> <example> <title><link linkend="object.set-state">__set_state()</link> の使用法</title> @@ -370,18 +405,20 @@ $a = new A; $a->var1 = 5; $a->var2 = 'foo'; -eval('$b = ' . var_export($a, true) . ';'); // $b = A::__set_state(array( - // 'var1' => 5, - // 'var2' => 'foo', - // )); +$b = var_export($a, true); var_dump($b); - +eval('$c = ' . $b . ';'); +var_dump($c); ?> ]]> </programlisting> &example.outputs; <screen> <![CDATA[ +string(60) "A::__set_state(array( + 'var1' => 5, + 'var2' => 'foo', +))" object(A)#2 (2) { ["var1"]=> int(5) diff --git a/language/oop5/overloading.xml b/language/oop5/overloading.xml index 2b5f3efd4b..8d7533c935 100644 --- a/language/oop5/overloading.xml +++ b/language/oop5/overloading.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <!-- CREDITS: hirokawa,shimooka,mumumu --> <sect1 xml:id="language.oop5.overloading" xmlns="http://docbook.org/ns/docbook"> @@ -283,7 +283,6 @@ class MethodTest . implode(', ', $arguments). "\n"; } - /** PHP 5.3.0 以降 */ public static function __callStatic($name, $arguments) { // 注意: $name は大文字小文字を区別します diff --git a/language/oop5/properties.xml b/language/oop5/properties.xml index b64c18b576..ae71d2a3e8 100644 --- a/language/oop5/properties.xml +++ b/language/oop5/properties.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: 02f3bf57175c48abff767ad2c0961c6cfe58a39e Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <!-- CREDITS: mumumu --> <sect1 xml:id="language.oop5.properties" xmlns="http://docbook.org/ns/docbook"> @@ -45,10 +45,7 @@ <para> クラスのメソッドがオブジェクトのコンテキストからコールされたときには、 擬似変数 <varname>$this</varname> が使えます。 - <varname>$this</varname> は、呼び出し元のオブジェクト - (通常はそのメソッドが属するオブジェクトですが、別のオブジェクトになる可能性もあります。 - 別のオブジェクトのコンテキストから <link linkend="language.oop5.static">静的に</link> - コールされた場合などです) の値です。 + <varname>$this</varname> は、呼び出し元のオブジェクトの値です。 </para> <para> diff --git a/language/oop5/serialization.xml b/language/oop5/serialization.xml index 920af03416..339dce69a8 100644 --- a/language/oop5/serialization.xml +++ b/language/oop5/serialization.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready --> +<!-- TODO Rewrite to remove usage of "you" and talk about __serialize/_unserialize --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook"> <title>オブジェクトのシリアライズ</title> <title>オブジェクトのシリアライズ - セッション内でのオブジェクト</title> diff --git a/language/oop5/static.xml b/language/oop5/static.xml index 169278cd35..d724b2da8f 100644 --- a/language/oop5/static.xml +++ b/language/oop5/static.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready --> -<!-- CREDITS: hirokawa,shimooka --> +<!-- EN-Revision: 8e7cce7b98ed33cda72ce0a77b1368ab396f6e09 Maintainer: takagi Status: ready --> +<!-- CREDITS: hirokawa,shimooka,mumumu --> <sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook"> <title>static キーワード</title> @@ -22,8 +22,8 @@ <para> クラスプロパティもしくはメソッドを static として宣言することで、 クラスのインスタンス化の必要なしにアクセスすることができます。 - static なプロパティは、インスタンス化されたクラスオブジェクトから - アクセスすることはできません (static なメソッドにはアクセスできます)。 + static として宣言されたプロパティやメソッドは、 + インスタンス化されたオブジェクトの内部からも静的にコールできます。 </para> <sect2 xml:id="language.oop5.static.methods"> @@ -70,14 +70,10 @@ $classname::aStaticMethod(); <title>static プロパティ</title> <para> - static プロパティは、矢印演算子 -&gt; によりオブジェクトからアクセス - することはできません。 - </para> - - <para> - 他の PHP 静的変数と同様、 - 静的プロパティの初期化は &const; 式と同じルールで行われます。 - コンパイル時に評価可能な、限られた式だけしか使えません。 + static プロパティは、 + <link linkend="language.oop5.paamayim-nekudotayim">スコープ定義演算子</link> + を使ってアクセスできますが、 + オブジェクト演算子 (<literal>-&gt;</literal>) を使ってアクセスすることはできません。 </para> <para> @@ -125,6 +121,22 @@ print $bar->fooStatic() . "\n"; ?> ]]> </programlisting> + &example.outputs.8.similar; + <screen> +<![CDATA[ +foo +foo + +Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 + +Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 + +foo +foo +foo +foo +]]> + </screen> </example> </sect2> </sect1> diff --git a/language/oop5/traits.xml b/language/oop5/traits.xml index a789a7f807..338cbb8573 100644 --- a/language/oop5/traits.xml +++ b/language/oop5/traits.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: takagi Status: ready --> <!-- CREDITS: mumumu --> <sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook"> @@ -456,7 +456,7 @@ trait PropertiesTrait { class PropertiesExample { use PropertiesTrait; - public $same = true; // Allowed as of PHP 7.0.0; E_STRICT notice formerly + public $same = true; public $different = true; // Fatal error } ?> diff --git a/language/oop5/visibility.xml b/language/oop5/visibility.xml index 1f9ebed5df..8cc9a20567 100644 --- a/language/oop5/visibility.xml +++ b/language/oop5/visibility.xml @@ -1,14 +1,14 @@ <?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> -<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready --> +<!-- EN-Revision: 9ee9eccf455188ab6eb352194eb6f9eb99e15606 Maintainer: hirokawa Status: ready --> <!-- CREDITS: takagi,mumumu --> <sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook"> <title>アクセス権</title> <para> プロパティ、メソッドまたは (PHP 7.1.0 以降) 定数のアクセス権 (visibility) は、 - キーワード: <emphasis>public</emphasis>, <emphasis>protected</emphasis> - または <emphasis>private</emphasis> を指定することにより定義できます。 + キーワード: <literal>public</literal>, <literal>protected</literal> + または <literal>private</literal> を指定することにより定義できます。 public 宣言されたクラスのメンバーには、どこからでもアクセス可能です。 protected 宣言されたメンバーには、 そのクラス自身、そのクラスを継承したクラス、および親クラスからのみアクセスできます。 @@ -19,7 +19,7 @@ <title>プロパティのアクセス権</title> <para> クラスのプロパティは、public, private, または protected - として定義しなくてはなりません。<emphasis>var</emphasis> + として定義しなければなりません。<literal>var</literal> を使って宣言した場合、 そのプロパティは public として定義されます。 </para>
« previous php.doc.ja (#6235) next »