11<?xml version =" 1.0" encoding =" utf-8" ?>
22<!-- $Revision$ -->
3- <!-- EN-Revision: 2f85d57a0b5a01b875cbca2b291f04389cf61ac2 Maintainer: takagi Status: ready -->
3+ <!-- EN-Revision: c1f37a6c270aadbbb3da56a3973ffd62197adf2b Maintainer: takagi Status: ready -->
44<!-- CREDITS: hirokawa,mumumu,jdkfx -->
55
66<sect1 xml : id =" language.oop5.basic" xmlns =" http://docbook.org/ns/docbook" >
@@ -226,67 +226,26 @@ readonly class Foo
226226 <programlisting role =" php" >
227227<![CDATA[
228228<?php
229+ class SimpleClass {
230+ }
231+
229232$instance = new SimpleClass();
233+ var_dump($instance);
230234
231235// 変数を使うこともできます
232236$className = 'SimpleClass';
233237$instance = new $className(); // new SimpleClass()
238+ var_dump($instance);
234239?>
235240]]>
236241 </programlisting >
237242 </example >
238- <para >
239- クラスのコンテキストにおいては、
240- <literal >new self</literal > や <literal >new parent</literal >
241- のようにして新しいオブジェクトを作成することができます。
242- </para >
243243 <para >
244- 作成済みのクラスのインスタンスを新たな変数に代入する場合、新しい変数は、
245- 代入されたオブジェクトと同じインスタンスにアクセスします。
246- この動作は、インスタンスを関数に渡す場合も同様です。
247- 作成済みのオブジェクトのコピーは、その
248- <link linkend =" language.oop5.cloning" >クローンを作成</link >
249- することにより作成可能です。
250- </para >
251- <example >
252- <title >オブジェクトの代入</title >
253- <programlisting role =" php" >
254- <![CDATA[
255- <?php
256-
257- $instance = new SimpleClass();
258-
259- $assigned = $instance;
260- $reference =& $instance;
261-
262- $instance->var = '$assigned will have this value';
263-
264- $instance = null; // $instance と $reference は null になります
265-
266- var_dump($instance);
267- var_dump($reference);
268- var_dump($assigned);
269- ?>
270- ]]>
271- </programlisting >
272- &example.outputs;
273- <screen >
274- <![CDATA[
275- NULL
276- NULL
277- object(SimpleClass)#1 (1) {
278- ["var"]=>
279- string(30) "$assigned will have this value"
280- }
281- ]]>
282- </screen >
283- </example >
284- <para >
285- PHP 8.0.0 以降では、
286- <literal >new</literal > を任意の式と一緒に使う機能がサポートされました。
287- これによって、式が文字列を生成する場合に、
288- より複雑なインスタンス化を行えるようになります。
289- 式は括弧で囲まなければいけません。
244+ PHP 8.0.0 以降では、
245+ <literal >new</literal > を任意の式と一緒に使う機能がサポートされました。
246+ これによって、式が文字列を生成する場合に、
247+ より複雑なインスタンス化を行えるようになります。
248+ 式は括弧で囲まなければいけません。
290249 </para >
291250 <example >
292251 <title >任意の式を使ってインスタンスを生成する</title >
@@ -329,6 +288,55 @@ object(ClassC)#1 (0) {
329288object(ClassD)#1 (0) {
330289}
331290
291+ ]]>
292+ </screen >
293+ </example >
294+ <para >
295+ クラスのコンテキストにおいては、
296+ <literal >new self</literal > や <literal >new parent</literal >
297+ のようにして新しいオブジェクトを作成することができます。
298+ </para >
299+ <para >
300+ 作成済みのクラスのインスタンスを新たな変数に代入する場合、新しい変数は、
301+ 代入されたオブジェクトと同じインスタンスにアクセスします。
302+ この動作は、インスタンスを関数に渡す場合も同様です。
303+ 作成済みのオブジェクトのコピーは、その
304+ <link linkend =" language.oop5.cloning" >クローンを作成</link >
305+ することにより作成可能です。
306+ </para >
307+ <example >
308+ <title >オブジェクトの代入</title >
309+ <programlisting role =" php" >
310+ <![CDATA[
311+ <?php
312+ class SimpleClass {
313+ public string $var;
314+ }
315+
316+ $instance = new SimpleClass();
317+
318+ $assigned = $instance;
319+ $reference =& $instance;
320+
321+ $instance->var = '$assigned will have this value';
322+
323+ $instance = null; // $instance と $reference は null になります
324+
325+ var_dump($instance);
326+ var_dump($reference);
327+ var_dump($assigned);
328+ ?>
329+ ]]>
330+ </programlisting >
331+ &example.outputs;
332+ <screen >
333+ <![CDATA[
334+ NULL
335+ NULL
336+ object(SimpleClass)#1 (1) {
337+ ["var"]=>
338+ string(30) "$assigned will have this value"
339+ }
332340]]>
333341 </screen >
334342 </example >
@@ -340,26 +348,27 @@ object(ClassD)#1 (0) {
340348 <programlisting role =" php" >
341349<![CDATA[
342350<?php
351+
343352class Test
344353{
345- static public function getNew()
354+ public static function getNew()
346355 {
347- return new static;
356+ return new static() ;
348357 }
349358}
350359
351- class Child extends Test
352- {}
360+ class Child extends Test {}
353361
354- $obj1 = new Test();
355- $obj2 = new $obj1;
362+ $obj1 = new Test(); // By the class name
363+ $obj2 = new $obj1(); // Through the variable containing an object
356364var_dump($obj1 !== $obj2);
357365
358- $obj3 = Test::getNew();
366+ $obj3 = Test::getNew(); // By the class method
359367var_dump($obj3 instanceof Test);
360368
361- $obj4 = Child::getNew();
369+ $obj4 = Child::getNew(); // Through a child class method
362370var_dump($obj4 instanceof Child);
371+
363372?>
364373]]>
365374 </programlisting >
@@ -381,16 +390,18 @@ bool(true)
381390 <programlisting role =" php" >
382391<![CDATA[
383392<?php
384- echo (new DateTime())->format('Y');
393+ echo (new DateTime())->format('Y'), PHP_EOL;
394+
385395// PHP 8.4.0 以降、囲む括弧は省略可能です。
386- echo new DateTime()->format('Y');
396+ echo new DateTime()->format('Y'), PHP_EOL ;
387397?>
388398]]>
389399 </programlisting >
390400 &example.outputs.similar;
391401 <screen >
392402<![CDATA[
393- 2016
403+ 2025
404+ 2025
394405]]>
395406 </screen >
396407 </example >
@@ -503,6 +514,14 @@ echo ($obj->bar)(), PHP_EOL;
503514 <programlisting role =" php" >
504515<![CDATA[
505516<?php
517+ class SimpleClass
518+ {
519+ function displayVar()
520+ {
521+ echo "Parent class\n";
522+ }
523+ }
524+
506525class ExtendClass extends SimpleClass
507526{
508527 // 親クラスのメソッドを再定義
@@ -754,9 +773,10 @@ Does\Not\Exist
754773namespace NS {
755774 class ClassName {
756775 }
776+
777+ $c = new ClassName();
778+ print $c::class;
757779}
758- $c = new ClassName();
759- print $c::class;
760780?>
761781]]>
762782 </programlisting >
@@ -787,7 +807,7 @@ NS\ClassName
787807 <para >
788808 <example >
789809 <title >nullsafe 演算子</title >
790- <programlisting role =" php" >
810+ <programlisting role =" php" annotations = " non-interactive " >
791811<![CDATA[
792812<?php
793813
0 commit comments