com doc/ja: Refactor OO section: language/constants.xml language/oop5/abstract.xml language/oop5/anonymous.xml language/oop5/autoload.xml language/oop5/basic.xml language/oop5/cloning.xml language/oop5/constants.xml language/oop5/decon.xml language/oop5/final.xml language/oop5/interfaces.xml language/oop5/iterations.xml language/oop5/late-static-bindings.xml language/oop5/magic.xml language/oop5/object-comparison.xml language/oop5/overloading.xml
[email protected] (Yoshinari Takaoka) Wed, 13 Jan 2021 19:10:36 +0000
| Newsgroups | php.doc.ja |
|---|---|
| Message-ID | <[email protected]> |
Commit: f3d0de8cfc95a4cfc751be30d162bcc6fed251c3 Author: Yoshinari Takaoka <[email protected]> Thu, 14 Jan 2021 04:10:36 +0900 Parents: 22ad44db5f5e52b449c089571ca852825d5524e8 Branches: master Link: http://git.php.net/?p=doc/ja.git;a=commitdiff;h=f3d0de8cfc95a4cfc751be30d162bcc6fed251c3 Log: Refactor OO section This mostly consists of removing PHP 5 mentions and rewritting the docs accordingly. Reviewed by Christoph M. Becker <[email protected]> and Anna Filina <[email protected]> Co-authored-by: Anna Filina <[email protected]> Closes GH-277 Changed paths: M language/constants.xml M language/oop5/abstract.xml M language/oop5/anonymous.xml M language/oop5/autoload.xml M language/oop5/basic.xml M language/oop5/cloning.xml M language/oop5/constants.xml M language/oop5/decon.xml M language/oop5/final.xml M language/oop5/interfaces.xml M language/oop5/iterations.xml M language/oop5/late-static-bindings.xml M language/oop5/magic.xml M language/oop5/object-comparison.xml M language/oop5/overloading.xml M language/oop5/paamayim-nekudotayim.xml M language/oop5/properties.xml M language/oop5/references.xml M language/oop5/serialization.xml M language/oop5/static.xml M language/oop5/traits.xml M language/oop5/visibility.xml
diff_f3d0de8cfc95a4cfc751be30d162bcc6fed251c3.txt
(text/plain, 58.4 KB)
diff --git a/language/constants.xml b/language/constants.xml
index e456072058..5b7609f253 100644
--- a/language/constants.xml
+++ b/language/constants.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 084d6414ec628d768a38d719443d42438b9ec398 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook">
diff --git a/language/oop5/abstract.xml b/language/oop5/abstract.xml
index 411f6e8590..c586273cda 100644
--- a/language/oop5/abstract.xml
+++ b/language/oop5/abstract.xml
@@ -1,16 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 9b5b5b7285b7c0da554909d9a6869ea33841a93c Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka -->
<sect1 xml:id="language.oop5.abstract" xmlns="http://docbook.org/ns/docbook">
<title>クラスの抽象化</title>
<para>
- PHP 5 では、抽象クラスとメソッドが導入されました。
- abstractとして定義されたクラスのインスタンスを生成することはできません。
- 1つ以上の抽象メソッドを含む全てのクラスもまた抽象クラスとなります。
- abstractとして定義されたメソッドは、そのメソッドの外観を宣言するのみで、
+ PHP には、抽象クラスと抽象メソッドの機能があります。
+ abstract として定義されたクラスのインスタンスを生成することはできません。
+ 1つ以上の抽象メソッドを含む全てのクラスもまた抽象クラスとなります。
+ abstract として定義されたメソッドは、そのメソッドのシグネチャを宣言するのみで、
実装を定義することはできません。
</para>
@@ -27,8 +27,6 @@
たとえば、子クラスでオプションの引数を定義しているけれども
抽象クラスのメソッドのシグネチャでは定義されていないという場合、
シグネチャの衝突は発生しません。
- PHP 5.4 以降では、これがコンストラクタについても適用されるようになりました。
- それより前のバージョンでは、コンストラクタのシグネチャは違ってもかまいませんでした。
</para>
<example>
diff --git a/language/oop5/anonymous.xml b/language/oop5/anonymous.xml
index 3b8defb639..d22cd78da7 100644
--- a/language/oop5/anonymous.xml
+++ b/language/oop5/anonymous.xml
@@ -1,13 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: c373ef087f8ba9c2d4358c81edd42c57d1eb7452 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<sect1 xml:id="language.oop5.anonymous" xmlns="http://docbook.org/ns/docbook">
<title>無名クラス</title>
<para>
- PHP 7 で、無名クラスをサポートするようになりました。
- その場限りの使い捨てのオブジェクトが必要になった場合に便利です。
+ 無名クラスは、その場限りの使い捨てのオブジェクトが必要になった場合に便利です。
</para>
<informalexample>
@@ -15,7 +14,7 @@
<![CDATA[
<?php
-// PHP 7 より前のバージョンのコード
+// 明示的にクラスを宣言して使う
class Logger
{
public function log($msg)
@@ -26,7 +25,7 @@ class Logger
$util->setLogger(new Logger());
-// PHP 7 以降のコード
+// 無名クラスを使う
$util->setLogger(new class {
public function log($msg)
{
@@ -76,7 +75,8 @@ object(class@anonymous)#1 (1) {
</informalexample>
<para>
- 無名クラスを別のクラス内で作っても、外側のクラスの private や protected なメソッドそしてプロパティにはアクセスできません。
+ 無名クラスを別のクラス内で作っても、外側のクラスの private や protected なメソッド、
+ およびプロパティにはアクセスできません。
外側のクラスの protected プロパティやメソッドにアクセスするには、
無名クラスに外側のクラスを継承させます。
外側のクラスの private プロパティを無名クラスで使うには、
diff --git a/language/oop5/autoload.xml b/language/oop5/autoload.xml
index 77480b7e9c..ca3bd24a95 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: 71b5a8fe9132b287da51b55290bce09d51512077 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<sect1 xml:id="language.oop5.autoload" xmlns="http://docbook.org/ns/docbook">
<title>クラスのオートローディング</title>
@@ -11,8 +11,8 @@
記述する必要があることです(各クラスについて一つ)。
</para>
<para>
- PHP 5では、これはもう不要です。
- <function>spl_autoload_register</function> 関数で任意の数のオートローダーを登録できて、
+ <function>spl_autoload_register</function> 関数を使うと、
+ 任意の数のオートローダーを登録でき、
クラスやインターフェイスが定義されていなくても自動的に読み込めるようになります。
オートローダーを登録すれば、PHPがエラーで止まる前にクラスをロードする最後の
チャンスが与えられます。
@@ -27,16 +27,6 @@
PHP 7.2.0 以降、非推奨となり、削除されます。
</para>
</tip>
- <note>
- <para>
- PHP 5.3 より前のバージョンでは、<function>__autoload</function> 関数の内部でスローされた例外を
- <link linkend="language.exceptions">catch</link>
- ブロックでキャッチすることができず、致命的なエラーとなります。
- PHP 5.3 以降ではこれをキャッチできるようになりました。ただし、
- 独自の例外クラスをスローした場合は、その例外クラスが利用可能でなければなりません。
- <function>__autoload</function> 関数を再帰的に用いて、独自の例外クラスをオートロードします。
- </para>
- </note>
<note>
<para>
オートローディングは、PHP を CLI
@@ -100,7 +90,7 @@ Fatal error: Interface 'ITest' not found in ...
</programlisting>
</example>
<example>
- <title>5.3.0 以降での例外処理つきのオートロード</title>
+ <title>例外処理つきのオートロード</title>
<para>
この例は、例外をスローして try/catch ブロックの動きを示します。
</para>
@@ -129,7 +119,7 @@ Unable to load NonLoadableClass.
</screen>
</example>
<example>
- <title>5.3.0 以降での例外処理つきのオートロード - 独自の例外が見つからない場合</title>
+ <title>例外処理つきのオートロード - 独自の例外が見つからない場合</title>
<para>
この例では、ロードできない独自の例外クラスをスローします。
</para>
diff --git a/language/oop5/basic.xml b/language/oop5/basic.xml
index 36366c172f..b3d89bb5f7 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: 4528db2d91279a8f120bacfd84e48f7e2281d923 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,mumumu -->
<sect1 xml:id="language.oop5.basic" xmlns="http://docbook.org/ns/docbook">
@@ -49,29 +49,20 @@ class SimpleClass
</programlisting>
</example>
<para>
- メソッドがオブジェクトコンテキストからコールされる場合は、
+ メソッドがオブジェクトのコンテキストからコールされる場合は、
疑似変数 <varname>$this</varname> が利用可能です。
- <varname>$this</varname> は、呼び出し元オブジェクト
- (通常は、メソッドが属するオブジェクトですが、
- メソッドが第二のオブジェクトのオブジェクトの
- コンテキストから <link linkend="language.oop5.static">スタティックに</link>
- コールされる場合には、別のオブジェクトとなる場合もあります)
- への参照です。
- PHP 7.0.0 以降は、スタティックではないメソッドを非互換のコンテキストでスタティックに呼び出すと、
- そのメソッド内では $this が未定義の状態になります。
- スタティックではないメソッドの、非互換なコンテキストにおけるスタティック呼び出しは PHP 5.6.0 で非推奨になりました。
- PHP 7.0.0 ではさらに、コンテキストの互換・非互換にかかわらず、
- スタティックではないメソッドのスタティック呼び出し全般が非推奨となりました。
- PHP 5.6.0 より前のバージョンでも、これらは既に strict 通知が出ていたものです。
+ <varname>$this</varname> は、呼び出し元オブジェクトへのリファレンスです。
</para>
- <para>
+ <warning>
+ <para>
+ 静的でないメソッドを static にコールすると、
+ <classname>Error</classname> がスローされます。
+ PHP 8.0.0 より前のバージョンでは、推奨されない警告が発生し、
+ <varname>$this</varname> が未定義になっていました。
+ </para>
<example xml:id="language.oop5.basic.class.this">
<title><varname>$this</varname> 疑似変数の例</title>
- <simpara>
- この例は、error_reporting が無効になっていることを前提としています。
- これが有効になっている場合、PHP のバージョンによって deprecated や strict の通知が出るでしょう。
- </simpara>
- <programlisting role="php">
+ <programlisting role="php">
<![CDATA[
<?php
class A
@@ -107,28 +98,38 @@ $b->bar();
B::bar();
?>
]]>
- </programlisting>
- &example.outputs.5;
- <screen>
+ </programlisting>
+ &example.outputs.7;
+ <screen>
<![CDATA[
$this is defined (A)
+
+Deprecated: Non-static method A::foo() should not be called statically in %s on line 27
+$this is not defined.
+
+Deprecated: Non-static method A::foo() should not be called statically in %s on line 20
$this is not defined.
-$this is defined (B)
+
+Deprecated: Non-static method B::bar() should not be called statically in %s on line 32
+
+Deprecated: Non-static method A::foo() should not be called statically in %s on line 20
$this is not defined.
]]>
- </screen>
- &example.outputs.7;
+ </screen>
+ &example.outputs.8;
<screen>
<![CDATA[
$this is defined (A)
-$this is not defined.
-$this is not defined.
-$this is not defined.
+
+Fatal error: Uncaught Error: Non-static method A::foo() cannot be called statically in %s :27
+Stack trace:
+#0 {main}
+ thrown in %s on line 27
]]>
</screen>
</example>
- </para>
- </sect2>
+ </warning>
+ </sect2>
<sect2 xml:id="language.oop5.basic.new">
<title>new</title>
@@ -215,7 +216,7 @@ object(SimpleClass)#1 (1) {
</screen>
</example>
<para>
- PHP 5.3.0 以降では、オブジェクトのインスタンスを作成する別の方法が新たに導入されました。
+ 複数のやり方で、オブジェクトのインスタンスを作ることが出来ます:
</para>
<example>
<title>新しいオブジェクトの作成</title>
@@ -256,7 +257,7 @@ bool(true)
</example>
<para>
- PHP 5.4.0 以降では、新しく作成したオブジェクトのメンバーに、作成したその式の中でもアクセスできるようになりました。
+ 新しく作成したオブジェクトのメンバーに、作成したその式の中でもアクセスすることができます。
</para>
<example>
<title>新しく作成したオブジェクトのメンバーへのアクセス</title>
@@ -321,7 +322,7 @@ method
これはつまり、プロパティに <link linkend="functions.anonymous">無名関数</link>
を代入した場合に、その関数は直接呼び出せないということです。
その場合は、たとえば事前にプロパティを変数に代入しておく必要があります。
- PHP 7.0.0 からは、括弧で囲むことでプロパティを直接呼び出せるようになりました。
+ 括弧で囲むと、プロパティを直接呼び出すこともできます。
</para>
<example>
<title>プロパティに格納した無名関数の呼び出し</title>
@@ -341,11 +342,6 @@ class Foo
$obj = new Foo();
-// PHP 5.3.0 以降
-$func = $obj->bar;
-echo $func(), PHP_EOL;
-
-// PHP 7.0.0 以降では、このようにすることもできます
echo ($obj->bar)(), PHP_EOL;
]]>
</programlisting>
@@ -359,14 +355,17 @@ echo ($obj->bar)(), PHP_EOL;
</sect2>
<sect2 xml:id="language.oop5.basic.extends">
+ <!-- TODO Example about class constant redefinition -->
+ <!-- TODO Split into it's own page? -->
<title>extends</title>
<para>
- クラスは、宣言部に <literal>extends</literal> キーワードを含めることで、他のクラスのメソッドと
- プロパティを継承することができます。多重継承を行うことはできず、クラスが継承できるベース
+ クラスは、宣言部に <literal>extends</literal> キーワードを含めることで、
+ 他のクラスの定数や、メソッド、
+ およびプロパティを継承することができます。多重継承を行うことはできず、クラスが継承できるベース
クラスは一つだけです。
</para>
<para>
- 継承されたメソッドやプロパティをオーバーライドするには、
+ 継承された定数やメソッド、プロパティをオーバーライドするには、
親クラスで定義されているのと同じ名前でそれを再宣言します。
しかし、親クラスでそのメソッドが
<link linkend="language.oop5.final">final</link>
@@ -376,6 +375,7 @@ echo ($obj->bar)(), PHP_EOL;
で参照します。
</para>
<para>
+ <!-- TODO rewrite this for PHP 7 and 8 -->
メソッドをオーバーライドするときには、パラメータのシグネチャも同じでなければなりません。
もし違っていれば、PHP は <constant>E_STRICT</constant>
レベルのエラーとなります。ただしコンストラクタは例外で、
diff --git a/language/oop5/cloning.xml b/language/oop5/cloning.xml
index 04d6dd3bc9..426aecdadf 100644
--- a/language/oop5/cloning.xml
+++ b/language/oop5/cloning.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 9093ce1bc60f23330e92e99784eec74d315f151c Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
+<!-- Credits: mumumu -->
<sect1 xml:id="language.oop5.cloning" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトのクローン作成</title>
@@ -140,7 +141,7 @@ MyCloneable Object
</example>
<para>
- PHP 7.0.0 以降では、新しくクローンしたオブジェクトのメンバーに、作成したその式の中でもアクセスできるようになりました。
+ 新しくクローンしたオブジェクトのメンバーに、作成したその式の中でもアクセスできます:
</para>
<example>
<title>クローンしたオブジェクトのメンバーへのアクセス</title>
diff --git a/language/oop5/constants.xml b/language/oop5/constants.xml
index 2c3eb7d35c..75350fc7c8 100644
--- a/language/oop5/constants.xml
+++ b/language/oop5/constants.xml
@@ -1,26 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: b08540046ece3586e543293d3c01630d9127b285 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka -->
<sect1 xml:id="language.oop5.constants" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクト定数</title>
<para>
- 値が変更できない定数をクラス内に定義することができます。
- 定数は、通常の変数とは異なり、定義または使用する際に
- <varname>$</varname> 記号を付けません。
+ 値が変更できない <link linkend="language.constants">定数</link> をクラス内に定義することができます。
クラス定数のデフォルトのアクセス範囲は <literal>public</literal> です。
</para>
+ <note>
<para>
- 定義する値は定数表現である必要があり、(例えば)変数・プロパティ
- あるいは関数のコールなどであってはいけません。
- </para>
- <para>
+ クラス定数は、子クラスで再定義することもできます。
+ </para>
+ </note>
+ <para>
インターフェイスに <literal>定数</literal> を持たせることもできます。
<link linkend="language.oop5.interfaces">インターフェイスについてのドキュメント</link>
- で例をごらんください。
+ で例を御覧ください。
</para>
<para>
- PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。
+ 変数を用いてクラスを参照することも可能です。
変数の値に (<literal>self</literal> や <literal>parent</literal>、
<literal>static</literal> といった)
キーワードを指定することはできません。
@@ -45,44 +44,20 @@ class MyClass
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
-echo $classname::CONSTANT . "\n"; // PHP 5.3.0 以降で対応
+echo $classname::CONSTANT . "\n";
$class = new MyClass();
$class->showConstant();
-echo $class::CONSTANT."\n"; // PHP 5.3.0 以降で対応
+echo $class::CONSTANT."\n";
?>
]]>
</programlisting>
</example>
- <example>
- <title>静的なデータの例</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-class foo {
- // PHP 5.3.0 以降で対応
- const BAR = <<<'EOT'
-bar
-EOT;
- // PHP 5.3.0 以降で対応
- const BAZ = <<<EOT
-baz
-EOT;
-}
-?>
-]]>
- </programlisting>
- </example>
- <note>
- <para>
- ヒアドキュメントや Nowdoc を用いた定数の初期化は PHP 5.3.0 以降で使えるようになりました。
- </para>
- </note>
<para>
- PHP 5.5.0 以降では、特別な <constant>::class</constant> 定数が使用可能です。
- この定数により、コンパイル時の完全修飾クラス名が解決できます。
+ 特別な <constant>::class</constant> 定数を使うと、
+ コンパイル時の完全修飾クラス名が解決できます。
これは名前空間クラスに役立ちます。
</para>
<example>
@@ -101,14 +76,13 @@ namespace foo {
</programlisting>
</example>
<example>
- <title>定数式の例</title>
+ <title>クラス内での定数式の例</title>
<programlisting role="php">
<![CDATA[
<?php
const ONE = 1;
class foo {
- // PHP 5.6.0 以降
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'The value of THREE is '.self::THREE;
@@ -116,23 +90,14 @@ class foo {
?>
]]>
</programlisting>
- <para>
- クラス定数のコンテキストで、数値リテラルや文字列リテラルそして定数を含むスカラー式を指定できます。
- </para>
</example>
- <note>
- <para>
- 定数における式のサポートは PHP 5.6.0 で追加されました。
- </para>
- </note>
<example>
- <title>クラス定数のアクセス範囲</title>
+ <title>PHP 7.1.0 以降の、クラス定数のアクセス範囲</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo {
- // PHP 7.1.0 以降
public const BAR = 'bar';
private const BAZ = 'baz';
}
diff --git a/language/oop5/decon.xml b/language/oop5/decon.xml
index 1475526d68..9c13a6866c 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: 72880807af948704e2dd806ff38b08112d39469c Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka,mumumu -->
<sect1 xml:id="language.oop5.decon" xmlns="http://docbook.org/ns/docbook">
@@ -261,8 +261,8 @@ $p3 = Product::fromXml($some_xml_string);
<void />
</methodsynopsis>
<para>
- PHP 5 では、C++ のような他のオブジェクト指向言語に似た概念のデストラクタが
- 導入されました。デストラクタメソッドは、
+ PHP には、C++ のような他のオブジェクト指向言語に似たデストラクタの概念があります。
+ デストラクタメソッドは、
特定のオブジェクトを参照するリファレンスがひとつもなくなったときにコールされます。
あるいは、スクリプトの終了時にも順不同でコールされます。
</para>
diff --git a/language/oop5/final.xml b/language/oop5/final.xml
index 921fab2383..2c49bcb23e 100644
--- a/language/oop5/final.xml
+++ b/language/oop5/final.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 1ae887f71cee9a2b171e8344cef33af689cfcde0 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<sect1 xml:id="language.oop5.final" xmlns="http://docbook.org/ns/docbook">
<title>finalキーワード</title>
<para>
- PHP 5 ではキーワード <emphasis>final</emphasis> が導入され、
- <emphasis>final</emphasis> を前に付けて定義されたメソッドは子クラスから上書きできません。
+ キーワード <emphasis>final</emphasis>
+ を前に付けて定義されたメソッドは、子クラスから上書きできません。
クラス自体がfinalと定義された場合には、このクラスを拡張することはできません。
</para>
<para>
diff --git a/language/oop5/interfaces.xml b/language/oop5/interfaces.xml
index 5022a1b8ff..f93cb2c12c 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: a9a6224ca97531df0a4e4b9b16b59c3f2baf1b09 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 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">
@@ -35,12 +35,12 @@
各インターフェイスをカンマで区切って指定することで、
クラスは複数のインターフェイスを実装することができます。
</para>
- <note>
+ <warning>
<para>
- PHP 5.3.9 より前のバージョンでは、ひとつのクラスの中で同じ名前のメソッドを定義した2つのインターフェイスを実装することはできませんでした。曖昧さを解決できなくなるためです。
- PHP 5.3.9 以後のバージョンでは、同じ名前のメソッドが同じシグナチャを持っている場合に限り、こうした実装を行えるようになっています。
+ クラスは、同じ名前のメソッドを定義した2つのインターフェイスを実装することが出来ます。
+ 但し、両方のインターフェイスのメソッド宣言が同一な場合に限ります。
</para>
- </note>
+ </warning>
<note>
<para>
クラスと同様、インターフェイスも
@@ -56,6 +56,7 @@
</para>
</note>
</sect2>
+ <!-- Move this to OOP constants page? -->
<sect2 xml:id="language.oop5.interfaces.constants">
<title><literal>定数</literal></title>
<para>
@@ -222,7 +223,7 @@ class b implements a
</programlisting>
</example>
<para>
- インターフェイスとタイプヒンティングを組み合わせると、
+ インターフェイスと型宣言を組み合わせると、
特定のオブジェクトに特定のメソッドをうまく持たせることができます。
<link linkend="language.operators.type">instanceof</link> 演算子および
<link linkend="language.types.declarations">型宣言</link>
diff --git a/language/oop5/iterations.xml b/language/oop5/iterations.xml
index af871e8015..eec2126846 100644
--- a/language/oop5/iterations.xml
+++ b/language/oop5/iterations.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: c2aae8928b69ed28b4e61bd7aadb869e5ccb64d8 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka -->
<sect1 xml:id="language.oop5.iterations" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトの反復処理</title>
<para>
- PHP 5 は、たとえば &foreach; 命令などによる反復処理を可能とするよう
+ PHP は、たとえば &foreach; 命令などによる反復処理を可能とするように、
オブジェクトを定義する手段を提供します。
デフォルトで、
全ての <link linkend="language.oop5.visibility">アクセス権限がある</link>
@@ -14,7 +14,7 @@
</para>
<example>
- <title>Simple Object Iteration</title>
+ <title>単純なオブジェクトの反復の例</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -171,7 +171,7 @@ valid:
<interfacename>IteratorAggregate</interfacename>
<link linkend="language.oop5.interfaces">インターフェイス</link>
を使うこともできます。
- <interfacename>IteratorAggregate</interfacename> で実装を要するメソッドは
+ <interfacename>IteratorAggregate</interfacename> で実装する必要があるメソッドは
<methodname>IteratorAggregate::getIterator</methodname> だけで、
このメソッドは <interfacename>Iterator</interfacename>
を実装したクラスのインスタンスを返す必要があります。
@@ -242,7 +242,7 @@ valid:
<note>
<para>
- より詳細なイタレータの例については、
+ より詳細なイテレータの例については、
<link linkend="spl.iterators">SPL 拡張モジュール</link>
を参照ください。
</para>
@@ -250,10 +250,8 @@ valid:
<note>
<para>
- PHP 5.5 以降を使っている場合は、
- <link linkend="language.generators">ジェネレータ</link>
- についても調べてみるといいでしょう。
- これも、イテレータを定義する方法の一つとして使えます。
+ <link linkend="language.generators">ジェネレータ</link> も、
+ イテレータを定義する方法の一つとして使えます。
</para>
</note>
diff --git a/language/oop5/late-static-bindings.xml b/language/oop5/late-static-bindings.xml
index 5e7178838f..15470466db 100644
--- a/language/oop5/late-static-bindings.xml
+++ b/language/oop5/late-static-bindings.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: bae6b5c7e070e7969cd99e5d72f9110878a4a538 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<sect1 xml:id="language.oop5.late-static-bindings" xmlns="http://docbook.org/ns/docbook">
<title>遅延静的束縛 (Late Static Bindings)</title>
<para>
- PHP 5.3.0 以降、PHP に遅延静的束縛と呼ばれる機能が搭載されます。
+ PHP には、遅延静的束縛と呼ばれる機能が搭載されています。
これを使用すると、静的継承のコンテキストで呼び出し元のクラスを参照できるようになります。
</para>
diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml
index 6e0a0d4ede..44a68944ed 100644
--- a/language/oop5/magic.xml
+++ b/language/oop5/magic.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 9e0f03ac354d797d1d16c0fcc1663e5e170f2727 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: shimooka,mumumu -->
<sect1 xml:id="language.oop5.magic" xmlns="http://docbook.org/ns/docbook">
@@ -39,9 +39,9 @@
<caution>
<simpara>
- PHP は、__ で始まる関数名を特殊関数として取り置きしてあります。
- このページに記載されているような特殊な機能を必要としないのであれば、
- 関数名を __ で始めないほうが良い。
+ PHP は、__ で始まる関数名を特殊関数として予約しています。
+ このページに記載されているような特殊な機能を必要としない限り、
+ 関数名を __ で始めないことを推奨します。
</simpara>
</caution>
@@ -99,7 +99,7 @@
その他の再初期化を行うことです。
</para>
<example>
- <title>sleep および wakeup</title>
+ <title>sleep と wakeup</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -195,7 +195,7 @@ class Connection
</para>
</note>
<example>
- <title>Serialize および unserialize</title>
+ <title>Serialize と unserialize</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -291,19 +291,6 @@ Hello
]]>
</screen>
</example>
- <para>
- 注意が必要なのは、PHP 5.2.0 より前では、
- <link linkend="object.tostring">__toString()</link> メソッドは
- <function>echo</function> または <function>print</function>
- と直接結合された場合のみコールされていたということです。
- PHP 5.2.0 以降では、これはすべての文字列コンテキスト
- (たとえば <function>printf</function> における <literal>%s</literal> 修飾子)
- でコールされます。しかし、その他の型のコンテキスト
- (たとえば <literal>%d</literal> 修飾子) ではコールされません。
- PHP 5.2.0 以降では、<link linkend="object.tostring">__toString()</link>
- メソッドを持っていないオブジェクトを文字列に変換しようとすると
- <constant>E_RECOVERABLE_ERROR</constant> が発生します。
- </para>
</sect2>
<sect2 xml:id="language.oop5.magic.invoke">
@@ -316,11 +303,6 @@ Hello
<link linkend="object.invoke">__invoke()</link> メソッドは、
スクリプトがオブジェクトを関数としてコールしようとした際にコールされます。
</para>
- <note>
- <para>
- この機能は PHP 5.3.0 以降で使用可能です。
- </para>
- </note>
<example>
<title><link linkend="object.invoke">__invoke()</link> の使用</title>
<programlisting role="php">
@@ -357,7 +339,7 @@ bool(true)
</methodsynopsis>
<para>
この <link linkend="language.oop5.static">static</link> メソッドは、
- PHP 5.1.0 以降で <function>var_export</function> によって
+ <function>var_export</function> によって
エクスポートされたクラスのためにコールされます。
</para>
<para>
@@ -365,7 +347,7 @@ bool(true)
<literal>array('property' => value, ...)</literal> の形式で保持する配列です。
</para>
<example>
- <title><link linkend="object.set-state">__set_state()</link> の使用法 (PHP 5.1.0 以降)</title>
+ <title><link linkend="object.set-state">__set_state()</link> の使用法</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -375,7 +357,7 @@ class A
public $var1;
public $var2;
- public static function __set_state($an_array) // PHP 5.1.0 以降
+ public static function __set_state($an_array)
{
$obj = new A;
$obj->var1 = $an_array['var1'];
@@ -434,9 +416,6 @@ object(A)#2 (2) {
もしオブジェクトにこのメソッドが定義されていなければ、
すべての public, protected, private プロパティを表示します。
</para>
- <para>
- この機能は PHP 5.6.0 で追加されました。
- </para>
<example>
<title><link linkend="object.debuginfo">__debugInfo()</link> の使用法</title>
<programlisting role="php">
diff --git a/language/oop5/object-comparison.xml b/language/oop5/object-comparison.xml
index 194e126eba..7b239768ec 100644
--- a/language/oop5/object-comparison.xml
+++ b/language/oop5/object-comparison.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: ead385635aff62492784d1bc32097d7a050f8207 Maintainer: hirokawa Status: ready -->
-<!-- CREDITS: shimooka -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
+<!-- CREDITS: shimooka,mumumu -->
<sect1 xml:id="language.oop5.object-comparison" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトの比較</title>
<para>
@@ -19,7 +19,7 @@
<para>
これらのルールを明確に示す例を以下に示します。
<example>
- <title>PHP 5におけるオブジェクト比較の例</title>
+ <title>オブジェクト比較の例</title>
<programlisting role="php">
<![CDATA[
<?php
diff --git a/language/oop5/overloading.xml b/language/oop5/overloading.xml
index 34bc88c237..87f90fe29f 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: 0c9761150371fbf66ded784d20b71ed4f758354e Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka,mumumu -->
<sect1 xml:id="language.oop5.overloading" xmlns="http://docbook.org/ns/docbook">
@@ -50,47 +50,6 @@
</para>
</note>
-
- <sect2 xml:id="language.oop5.overloading.changelog">
- &reftitle.changelog;
- <para>
- <informaltable>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>&Version;</entry>
- <entry>&Description;</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>5.3.0</entry>
- <entry>
- <link linkend="object.callstatic">__callStatic()</link> が追加されました。
- public で、かつ static でない宣言を強制するような警告が追加されました。
- </entry>
- </row>
- <row>
- <entry>5.1.0</entry>
- <entry>
- <link linkend="object.isset">__isset()</link> と <link linkend="object.unset">__unset()</link>
- が追加されました。
- <link linkend="object.get">__get()</link> が private プロパティのオーバーロードに対応しました。
- </entry>
- </row>
- <row>
- <entry>5.0.0</entry>
- <entry>
- <link linkend="object.get">__get()</link> が追加されました。
- </entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </para>
- </sect2>
-
-
<sect2 xml:id="language.oop5.overloading.members">
<title>プロパティのオーバーロード</title>
@@ -148,7 +107,7 @@
したがって、これらのメソッドを
<link linkend="language.oop5.static">static</link>
宣言してはいけません。
- PHP 5.3.0 以降、マジックオーバーロードメソッドを <literal>static</literal>
+ マジックメソッドを <literal>static</literal>
宣言すると警告が発生します。
</para>
@@ -204,14 +163,12 @@ class PropertyTest
return null;
}
- /** PHP 5.1.0 以降 */
public function __isset($name)
{
echo "Is '$name' set?\n";
return isset($this->data[$name]);
}
- /** PHP 5.1.0 以降 */
public function __unset($name)
{
echo "Unsetting '$name'\n";
@@ -338,7 +295,7 @@ class MethodTest
$obj = new MethodTest;
$obj->runTest('in object context');
-MethodTest::runTest('in static context'); // PHP 5.3.0 以降
+MethodTest::runTest('in static context');
?>
]]>
</programlisting>
diff --git a/language/oop5/paamayim-nekudotayim.xml b/language/oop5/paamayim-nekudotayim.xml
index 7c78683885..7bec878051 100644
--- a/language/oop5/paamayim-nekudotayim.xml
+++ b/language/oop5/paamayim-nekudotayim.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 3e823762fd850c92306d53b0b25c7a7667245280 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa -->
<sect1 xml:id="language.oop5.paamayim-nekudotayim" xmlns="http://docbook.org/ns/docbook">
@@ -20,7 +20,7 @@
</para>
<para>
- PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。
+ 変数を用いてクラスを参照することも可能です。
変数の値に (<literal>self</literal> や <literal>parent</literal>、
<literal>static</literal> といった)
キーワードを指定することはできません。
@@ -44,7 +44,7 @@ class MyClass {
}
$classname = 'MyClass';
-echo $classname::CONST_VALUE; // PHP 5.3.0 以降で対応
+echo $classname::CONST_VALUE;
echo MyClass::CONST_VALUE;
?>
@@ -73,7 +73,7 @@ class OtherClass extends MyClass
}
$classname = 'OtherClass';
-$classname::doubleColon(); // PHP 5.3.0 以降で対応
+$classname::doubleColon();
OtherClass::doubleColon();
?>
diff --git a/language/oop5/properties.xml b/language/oop5/properties.xml
index 8dbbe7b67c..7e170a161c 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: 86e6094e86b84a51d00ab217ac50ce8dde33d82a Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: mumumu -->
<sect1 xml:id="language.oop5.properties" xmlns="http://docbook.org/ns/docbook">
@@ -8,15 +8,14 @@
<para>
クラスのメンバ変数のことを <emphasis>プロパティ</emphasis> といいます。
- それ以外に <emphasis>属性</emphasis> や <emphasis>フィールド</emphasis> などという呼びかたを見たことがあるかもしれません。
+ それ以外に <emphasis>フィールド</emphasis> などという呼びかたを見たことがあるかもしれません。
しかし、このマニュアルでは <emphasis>プロパティ</emphasis> と呼ぶことにします。
プロパティを定義するには <literal>public</literal>、<literal>protected</literal>
あるいは <literal>private</literal>
- のいずれかのキーワードのあとに、オプションの型宣言を続け、
+ のいずれかのキーワードのあとに、(PHP 7.4 以降のみ)オプションの型宣言を続け、
そして通常の変数の宣言を続けます。
- 宣言時に初期値を設定することもできますが、初期値は定数値でなければなりません。
- つまり、コンパイル時に評価可能な値でなければならず、
- 実行時の情報がないと評価できない値であってはいけないということです。
+ 宣言時に初期値を設定することもできますが、
+ 初期値は <link linkend="language.constants">定数</link> 値でなければなりません。
</para>
<para>
<literal>public</literal>、<literal>protected</literal>
@@ -25,25 +24,16 @@
</para>
<note>
<para>
- PHP 4 との互換性を考慮して、PHP 5 でも <literal>var</literal>
- を使ったプロパティの宣言が可能です。これは
- <literal>public</literal> や <literal>protected</literal>、
- <literal>private</literal> と組み合わせて使うこともできます。
- しかし、もはや <literal>var</literal> は必須ではありません。
- PHP 5.0 から 5.1.3 までのバージョンでは、
- <literal>var</literal> の使用は非推奨とされており、
- <constant>E_STRICT</constant> 警告が発生していました。
- しかし PHP 5.1.3 以降は非推奨ではなくなり、警告も出なくなっています。
- </para>
- <para>
- <literal>public</literal> や <literal>protected</literal>、
- <literal>private</literal> のかわりに <literal>var</literal>
- を使ってプロパティを宣言した場合、PHP 5 はそれを
- <literal>public</literal> と同等とみなします。
+ PHP 4 との後方互換性を維持する目的で、
+ クラスのプロパティを宣言する代替の方法として、<literal>var</literal> を使う方法があります。
+ これは推奨されません。
+ <literal>var</literal>
+ を使ってプロパティを宣言した場合、
+ その変数は <literal>public</literal> と同等とみなされます。
</para>
</note>
<para>
- クラスメソッドから静的でないプロパティにアクセスするには
+ クラスのメソッドから静的でないプロパティにアクセスするには
<literal>-></literal> (オブジェクト演算子) を使って
<varname>$this->property</varname> のようにします
(<literal>property</literal> のところにプロパティ名を指定します)。
@@ -53,7 +43,7 @@
<link linkend="language.oop5.static">static キーワード</link> を参照ください。
</para>
<para>
- クラスメソッドがオブジェクトのコンテキストからコールされたときには、
+ クラスのメソッドがオブジェクトのコンテキストからコールされたときには、
擬似変数 <varname>$this</varname> が常に使えます。
<varname>$this</varname> は、呼び出し元のオブジェクト
(通常はそのメソッドが属するオブジェクトですが、別のオブジェクトになる可能性もあります。
@@ -69,13 +59,10 @@
<?php
class SimpleClass
{
- // PHP 5.6.0 以降で使える方式
public $var1 = 'hello ' . 'world';
- // PHP 5.3.0 以降で使える方式
public $var2 = <<<EOD
hello world
EOD;
- // PHP 5.6.0 以降で使える方式
public $var3 = 1+2;
// 無効なプロパティ宣言
public $var4 = self::myStaticMethod();
@@ -83,9 +70,8 @@ EOD;
// 有効なプロパティ宣言
public $var6 = myConstant;
- public $var7 = array(true, false);
+ public $var7 = [true, false];
- // PHP 5.3.0 以降で使える方式
public $var8 = <<<'EOD'
hello world
EOD;
@@ -104,43 +90,10 @@ EOD;
</para>
</note>
- <sect2 xml:id="language.oop5.properties.heredoc-nowdoc">
- <title>ヒアドキュメント と Nowdoc</title>
- <para>
- PHP 5.3.0 以降、
- <link linkend="language.types.string.syntax.heredoc">ヒアドキュメント</link> や
- <link linkend="language.types.string.syntax.nowdoc">Nowdoc</link>
- は任意の静的データコンテキストで使えます。プロパティの宣言時にも使用可能です。
- <example>
- <title>Nowdoc を使ったプロパティの初期化</title>
- <programlisting role="php">
-<![CDATA[
-<?php
-class foo {
- // PHP 5.3.0 以降
- public $bar = <<<'EOT'
-bar
-EOT;
- public $baz = <<<EOT
-baz
-EOT;
-}
-?>
-]]>
- </programlisting>
- </example>
- </para>
- <note>
- <para>
- Nowdoc とヒアドキュメントは PHP 5.3.0 以降で使用可能です。
- </para>
- </note>
- </sect2>
-
<sect2 xml:id="language.oop5.properties.typed-properties">
<title>型宣言</title>
<para>
- PHP 7.4.0 以降は、プロパティの定義に型宣言を含めることができます。
+ PHP 7.4.0 以降は、プロパティの定義に <xref linkend="language.types.declarations" /> を含めることができます。
但し、<literal>callable</literal> 型を除きます。
<example>
<title>型付きプロパティの例</title>
@@ -239,100 +192,6 @@ Fatal error: Uncaught Error: Typed property Shape::$numberOfSides must not be ac
</example>
</para>
- <sect3 xml:id="language.oop5.properties.typed-properties.valid-types">
- <title>有効なプロパティの型</title>
- <informaltable>
- <tgroup cols="3">
- <thead>
- <row>
- <entry>型</entry>
- <entry>説明</entry>
- <entry>必要なPHPのバージョン</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry><type>bool</type></entry>
- <entry>
- プロパティの値は <type>bool</type> 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><type>int</type></entry>
- <entry>
- プロパティの値は <type>int</type> 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><type>float</type></entry>
- <entry>
- プロパティの値は <type>float</type> (浮動小数点型の数値) 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><type>string</type></entry>
- <entry>
- プロパティの値は <type>string</type> 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><type>array</type></entry>
- <entry>
- プロパティの値は <type>array</type> 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><literal>object</literal></entry>
- <entry>
- プロパティの値は <type>object</type> 型でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><literal>iterable</literal></entry>
- <entry>
- プロパティの値は、<type>array</type> 型か、
- <interfacename>Traversable</interfacename> のインスタンスでなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><literal>self</literal></entry>
- <entry>
- プロパティの値は、プロパティが定義されたクラスのインスタンスでなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry><literal>parent</literal></entry>
- <entry>
- プロパティの値は、プロパティが定義されたクラスの親クラスのインスタンスでなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry>Class/interface name</entry>
- <entry>
- プロパティの値は、指定したクラスまたはインターフェイスのインスタンスでなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- <row>
- <entry>?type</entry>
- <entry>
- プロパティの値は、指定された型か、 &null; でなければなりません。
- </entry>
- <entry>PHP 7.4.0</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect3>
</sect2>
</sect1>
diff --git a/language/oop5/references.xml b/language/oop5/references.xml
index 37e1be77b1..d5406cf5d4 100644
--- a/language/oop5/references.xml
+++ b/language/oop5/references.xml
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 5c05004b296957e2744d32ebfacc362871422b66 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<sect1 xml:id="language.oop5.references" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトと参照</title>
<para>
- PHP 5 でのオブジェクト指向プログラミングのポイントとしてよく言われるのは
+ PHP でのオブジェクト指向プログラミングのポイントとしてよく言われるのは
「オブジェクトはデフォルトでは参照渡しとなります」ということです。
しかし、正確には少し異なります。
この節では、いくつかの例を用いてその誤解をといていきます。
@@ -12,7 +12,7 @@
<para>
PHP の参照は一種のエイリアスで、ふたつの異なる変数に同じ値を書き込めるものです。
- PHP 5 以降、オブジェクト変数の値にオブジェクト自身は含まれなくなりました。
+ PHP では、オブジェクト変数の値にオブジェクト自身は含まれません。
含まれるのはオブジェクトの ID のみで、
これを用いて実際のオブジェクトにアクセスできるようになっています。
オブジェクトが引数として渡されたり返り値となったり
diff --git a/language/oop5/serialization.xml b/language/oop5/serialization.xml
index 001b8997fb..920af03416 100644
--- a/language/oop5/serialization.xml
+++ b/language/oop5/serialization.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 1fc0b05670b5f6ad20e3a4aad30a491eca7a2659 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<sect1 xml:id="language.oop5.serialization" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトのシリアライズ</title>
<title>オブジェクトのシリアライズ - セッション内でのオブジェクト</title>
@@ -65,16 +65,6 @@
</informalexample>
<para>
- セッションを使っているアプリケーションで
- <function>session_register</function> を使ってオブジェクトを登録した場合は、
- PHP のページの終了時にオブジェクトが自動的にシリアライズされます。
- そして、次のページが始まるときに自動的にそれが復元されるのです。
- これによって、いちどセッションに登録したオブジェクトは
- アプリケーションのどのページでも使えるようになります。
- しかし <function>session_register</function> 関数は PHP 5.4.0 で削除されます。
- </para>
-
- <para>
アプリケーション内でオブジェクトをシリアライズして再利用する場合のお勧めは、
そのクラスの定義をアプリケーション全体で include することです。
クラスの定義が存在しなければオブジェクトの復元に失敗してしまいます。
diff --git a/language/oop5/static.xml b/language/oop5/static.xml
index 981433caa4..169278cd35 100644
--- a/language/oop5/static.xml
+++ b/language/oop5/static.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 7e52ec86851a62d1d00109ccffa5dab5c73e5cc2 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: hirokawa,shimooka -->
<sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
@@ -26,14 +26,6 @@
アクセスすることはできません (static なメソッドにはアクセスできます)。
</para>
- <para>
- PHP 4 との互換性を維持するため、
- <link linkend="language.oop5.visibility">可視性</link>の宣言が
- ない場合、そのプロパティまたはメソッドは、
- <literal>public</literal>として宣言されていると
- みなされます。
- </para>
-
<sect2 xml:id="language.oop5.static.methods">
<title>static メソッド</title>
@@ -43,23 +35,19 @@
static として宣言されたメソッドの内部から利用することはできません。
</para>
- <caution>
- <simpara>
- PHP 5 では、static でないメソッドを静的にコールすると、<constant>E_STRICT</constant>
- レベルの警告が発生します。
- </simpara>
- </caution>
-
<warning>
- <simpara>
- PHP 7 では、static でないメソッドを静的にコールすることが非推奨になりました。
- <constant>E_DEPRECATED</constant> レベルの警告が発生します。
- 将来的にはサポートされなくなる見込みです。
- </simpara>
+ <para>
+ static でないメソッドを静的にコールすると、<classname>Error</classname> がスローされます。
+ </para>
+ <para>
+ PHP 8.0.0 より前のバージョンでは、
+ static でないメソッドを静的にコールすることが非推奨になっており、
+ <constant>E_DEPRECATED</constant> レベルの警告が発生していました。
+ </para>
</warning>
<example>
- <title>Static method example</title>
+ <title>static メソッドの例</title>
<programlisting role="php">
<![CDATA[
<?php
@@ -71,7 +59,7 @@ class Foo {
Foo::aStaticMethod();
$classname = 'Foo';
-$classname::aStaticMethod(); // PHP 5.3.0 以降で対応
+$classname::aStaticMethod();
?>
]]>
</programlisting>
@@ -88,14 +76,12 @@ $classname::aStaticMethod(); // PHP 5.3.0 以降で対応
<para>
他の PHP 静的変数と同様、
- 静的プロパティの初期化はリテラルあるいは定数でのみ可能です。
- 式で初期化することはできません。
- PHP 5.6 以降では、同じルールが &const; 式にも当てはまります。
+ 静的プロパティの初期化は &const; 式と同じルールで行われます。
コンパイル時に評価可能な、限られた式だけしか使えません。
</para>
<para>
- PHP 5.3.0 以降では、変数を用いてクラスを参照することも可能です。
+ 変数を用いてクラスを参照することも可能です。
変数の値に (<literal>self</literal> や <literal>parent</literal>、
<literal>static</literal> といった)
キーワードを指定することはできません。
@@ -131,7 +117,7 @@ print $foo->my_static . "\n"; // Undefined "Property" my_static
print $foo::$my_static . "\n";
$classname = 'Foo';
-print $classname::$my_static . "\n"; // PHP 5.3.0 以降で対応
+print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
diff --git a/language/oop5/traits.xml b/language/oop5/traits.xml
index 24d3c1b075..9729e174e9 100644
--- a/language/oop5/traits.xml
+++ b/language/oop5/traits.xml
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 796ebb7fa127283377acf69fa9a9c3637ae2cd97 Maintainer: takagi Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<!-- CREDITS: mumumu -->
<sect1 xml:id="language.oop5.traits" xmlns="http://docbook.org/ns/docbook">
<title>トレイト</title>
<para>
- PHP 5.4.0 以降では、コードを再利用するための「トレイト」という仕組みが導入されました。
+ PHP は、コードを再利用するための「トレイト」という仕組みを実装しています。
</para>
<para>
トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。
@@ -239,14 +239,6 @@ class Aliased_Talker {
]]>
</programlisting>
</example>
- <note>
- <para>
- PHP 7.0 より前のバージョンでは、
- トレイトに存在する名前と同じ名前をクラスのプロパティに定義すると、
- クラス定義に互換性(公開範囲と初期値が同じ)があっても、
- <constant>E_STRICT</constant> レベルの警告が発生していました。
- </para>
- </note>
</sect2>
<sect2 xml:id="language.oop5.traits.visibility">
@@ -451,10 +443,6 @@ $example->x;
トレイトでプロパティを定義したときは、
クラスではそれと互換性(公開範囲と初期値が同じ)がない同じ名前のプロパティを定義できません。
互換性がない名前を定義すると、致命的なエラーが発生します。
- PHP 7.0.0 より前のバージョンでは、
- トレイトに存在する名前と同じ名前をクラスのプロパティに定義すると、
- クラス定義に互換性(公開範囲と初期値が同じ)があっても、
- <constant>E_STRICT</constant> レベルの警告が発生していました。
</para>
<example xml:id="language.oop5.traits.properties.conflicts">
<title>衝突の解決</title>
diff --git a/language/oop5/visibility.xml b/language/oop5/visibility.xml
index c7bfd3d11b..1f9ebed5df 100644
--- a/language/oop5/visibility.xml
+++ b/language/oop5/visibility.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
-<!-- EN-Revision: 70fb482c26ecfb7b95b1484ebb73a14f272c9871 Maintainer: hirokawa Status: ready -->
+<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi,mumumu -->
<sect1 xml:id="language.oop5.visibility" xmlns="http://docbook.org/ns/docbook">
@@ -82,15 +82,6 @@ $obj2->printHello(); // Public2, Protected2, Undefined を表示します
</programlisting>
</example>
</para>
- <note>
- <simpara>
- キーワード <emphasis>var</emphasis> で変数を宣言する
- PHP 4 の方法は、互換性を保つために今でもサポートされています
- (これは public と同じ扱いになります)。PHP 5.1.3 より前では、
- これを使用すると <constant>E_STRICT</constant>
- 警告が発生します。
- </simpara>
- </note>
</sect2>
<sect2 xml:id="language.oop5.visiblity-methods">
@@ -198,7 +189,7 @@ $myFoo->test(); // Bar::testPrivate
<title>定数のアクセス権</title>
<para>
PHP 7.1.0 以降では、クラスの定数は public, private, protected
- として定義することが許されるようになりました。
+ として定義できるようになりました。
明示的に公開範囲のキーワードを明示的に宣言しない定数は、public として定義されます。
</para>
<para>