1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<!-- $Revision$ -->
3
- <!-- EN-Revision: c925e1a0ce0659ee1c12d80f9a4a58b10cc4222f Maintainer: KentarouTakeda Status: ready -->
3
+ <!-- EN-Revision: cd2980a57a0845def25ed84276d9662159a91bd5 Maintainer: KentarouTakeda Status: ready -->
4
4
<sect1 xml : id =" language.oop5.property-hooks" xmlns =" http://docbook.org/ns/docbook" >
5
5
<title >プロパティフック</title >
6
6
44
44
アクセス自体の制限も行いたい場合、
45
45
<link linkend =" language.oop5.visibility-members-aviz" >非対称可視性プロパティ</link > を使ってください。
46
46
</simpara >
47
- <sect2 >
47
+
48
+ <note >
49
+ <title >バージョン情報</title >
50
+ <simpara >
51
+ プロパティフックは PHP 8.4 で導入されました。
52
+ </simpara >
53
+ </note >
54
+
55
+ <sect2 >
48
56
<title >基本的なフック構文</title >
49
57
<simpara >
50
58
フックを宣言する一般的な構文は次のとおりです。
@@ -213,6 +221,7 @@ class Example
213
221
</simpara >
214
222
<programlisting role =" php" >
215
223
<![CDATA[
224
+ <?php
216
225
class Example
217
226
{
218
227
public function __construct(
@@ -234,6 +243,7 @@ class Example
234
243
</simpara >
235
244
<programlisting role =" php" >
236
245
<![CDATA[
246
+ <?php
237
247
class Example
238
248
{
239
249
public private(set) DateTimeInterface $created {
@@ -273,7 +283,7 @@ class Example
273
283
仮想プロパティは、値を保持しないプロパティです。
274
284
<literal >get</literal >、<literal >set</literal > いずれのフックも
275
285
プロパティ自体を正確に参照していない場合、それは仮想プロパティになります。
276
- 例えば、<code >$foo</code > という名前のプロパティのフックに <code >$this->foo</code > というコード含まれれば 、それはバックドプロパティです。
286
+ 例えば、<code >$foo</code > という名前のプロパティのフックに <code >$this->foo</code > というコードが含まれれば 、それはバックドプロパティです。
277
287
次のプロパティはバックドプロパティではなく、エラーが発生します:
278
288
</simpara >
279
289
<example >
@@ -306,7 +316,7 @@ class Example
306
316
<programlisting role =" php" >
307
317
<![CDATA[
308
318
<?php
309
- readonly class Rectangle
319
+ class Rectangle
310
320
{
311
321
// 仮想プロパティ
312
322
public int $area {
@@ -499,7 +509,10 @@ class PositivePoint extends Point
499
509
フックは、自分自身のプロパティにおける親フック以外は呼び出せません。
500
510
</simpara >
501
511
<simpara >
502
- 上記の例をより効率的に書くと、以下のようになります。
512
+ 上記の例は以下のように書き換えることができます。このようにすると、
513
+ 将来 <literal >Point</literal > クラスに独自の <literal >set</literal >
514
+ フックを追加しても問題になりません(前述の例では、
515
+ 親クラスに追加されたフックが子クラスで無視されてしまいます)。
503
516
</simpara >
504
517
<example >
505
518
<title >親フックへのアクセス (set)</title >
@@ -519,7 +532,7 @@ class PositivePoint extends Point
519
532
if ($value < 0) {
520
533
throw new \InvalidArgumentException('Too small');
521
534
}
522
- $this->x = $value;
535
+ parent::$x::set( $value) ;
523
536
}
524
537
}
525
538
}
0 commit comments