11<?xml version =" 1.0" encoding =" utf-8" ?>
22<!-- $Revision$ -->
3- <!-- EN-Revision: c925e1a0ce0659ee1c12d80f9a4a58b10cc4222f Maintainer: KentarouTakeda Status: ready -->
3+ <!-- EN-Revision: cd2980a57a0845def25ed84276d9662159a91bd5 Maintainer: KentarouTakeda Status: ready -->
44<sect1 xml : id =" language.oop5.property-hooks" xmlns =" http://docbook.org/ns/docbook" >
55 <title >プロパティフック</title >
66
4444 アクセス自体の制限も行いたい場合、
4545 <link linkend =" language.oop5.visibility-members-aviz" >非対称可視性プロパティ</link > を使ってください。
4646 </simpara >
47- <sect2 >
47+
48+ <note >
49+ <title >バージョン情報</title >
50+ <simpara >
51+ プロパティフックは PHP 8.4 で導入されました。
52+ </simpara >
53+ </note >
54+
55+ <sect2 >
4856 <title >基本的なフック構文</title >
4957 <simpara >
5058 フックを宣言する一般的な構文は次のとおりです。
@@ -213,6 +221,7 @@ class Example
213221 </simpara >
214222 <programlisting role =" php" >
215223<![CDATA[
224+ <?php
216225class Example
217226{
218227 public function __construct(
@@ -234,6 +243,7 @@ class Example
234243 </simpara >
235244 <programlisting role =" php" >
236245<![CDATA[
246+ <?php
237247class Example
238248{
239249 public private(set) DateTimeInterface $created {
@@ -273,7 +283,7 @@ class Example
273283 仮想プロパティは、値を保持しないプロパティです。
274284 <literal >get</literal >、<literal >set</literal > いずれのフックも
275285 プロパティ自体を正確に参照していない場合、それは仮想プロパティになります。
276- 例えば、<code >$foo</code > という名前のプロパティのフックに <code >$this->foo</code > というコード含まれれば 、それはバックドプロパティです。
286+ 例えば、<code >$foo</code > という名前のプロパティのフックに <code >$this->foo</code > というコードが含まれれば 、それはバックドプロパティです。
277287 次のプロパティはバックドプロパティではなく、エラーが発生します:
278288 </simpara >
279289 <example >
@@ -306,7 +316,7 @@ class Example
306316 <programlisting role =" php" >
307317<![CDATA[
308318<?php
309- readonly class Rectangle
319+ class Rectangle
310320{
311321 // 仮想プロパティ
312322 public int $area {
@@ -499,7 +509,10 @@ class PositivePoint extends Point
499509 フックは、自分自身のプロパティにおける親フック以外は呼び出せません。
500510 </simpara >
501511 <simpara >
502- 上記の例をより効率的に書くと、以下のようになります。
512+ 上記の例は以下のように書き換えることができます。このようにすると、
513+ 将来 <literal >Point</literal > クラスに独自の <literal >set</literal >
514+ フックを追加しても問題になりません(前述の例では、
515+ 親クラスに追加されたフックが子クラスで無視されてしまいます)。
503516 </simpara >
504517 <example >
505518 <title >親フックへのアクセス (set)</title >
@@ -519,7 +532,7 @@ class PositivePoint extends Point
519532 if ($value < 0) {
520533 throw new \InvalidArgumentException('Too small');
521534 }
522- $this->x = $value;
535+ parent::$x::set( $value) ;
523536 }
524537 }
525538}
0 commit comments