1
1
<?xml version =" 1.0" encoding =" utf-8" ?>
2
2
<!-- $Revision$ -->
3
- <!-- EN-Revision: 2f85d57a0b5a01b875cbca2b291f04389cf61ac2 Maintainer: takagi Status: ready -->
3
+ <!-- EN-Revision: c1f37a6c270aadbbb3da56a3973ffd62197adf2b Maintainer: takagi Status: ready -->
4
4
<!-- CREDITS: hirokawa,mumumu,jdkfx -->
5
5
6
6
<sect1 xml : id =" language.oop5.basic" xmlns =" http://docbook.org/ns/docbook" >
@@ -226,67 +226,26 @@ readonly class Foo
226
226
<programlisting role =" php" >
227
227
<![CDATA[
228
228
<?php
229
+ class SimpleClass {
230
+ }
231
+
229
232
$instance = new SimpleClass();
233
+ var_dump($instance);
230
234
231
235
// 変数を使うこともできます
232
236
$className = 'SimpleClass';
233
237
$instance = new $className(); // new SimpleClass()
238
+ var_dump($instance);
234
239
?>
235
240
]]>
236
241
</programlisting >
237
242
</example >
238
- <para >
239
- クラスのコンテキストにおいては、
240
- <literal >new self</literal > や <literal >new parent</literal >
241
- のようにして新しいオブジェクトを作成することができます。
242
- </para >
243
243
<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
+ 式は括弧で囲まなければいけません。
290
249
</para >
291
250
<example >
292
251
<title >任意の式を使ってインスタンスを生成する</title >
@@ -329,6 +288,55 @@ object(ClassC)#1 (0) {
329
288
object(ClassD)#1 (0) {
330
289
}
331
290
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
+ }
332
340
]]>
333
341
</screen >
334
342
</example >
@@ -340,26 +348,27 @@ object(ClassD)#1 (0) {
340
348
<programlisting role =" php" >
341
349
<![CDATA[
342
350
<?php
351
+
343
352
class Test
344
353
{
345
- static public function getNew()
354
+ public static function getNew()
346
355
{
347
- return new static;
356
+ return new static() ;
348
357
}
349
358
}
350
359
351
- class Child extends Test
352
- {}
360
+ class Child extends Test {}
353
361
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
356
364
var_dump($obj1 !== $obj2);
357
365
358
- $obj3 = Test::getNew();
366
+ $obj3 = Test::getNew(); // By the class method
359
367
var_dump($obj3 instanceof Test);
360
368
361
- $obj4 = Child::getNew();
369
+ $obj4 = Child::getNew(); // Through a child class method
362
370
var_dump($obj4 instanceof Child);
371
+
363
372
?>
364
373
]]>
365
374
</programlisting >
@@ -381,16 +390,18 @@ bool(true)
381
390
<programlisting role =" php" >
382
391
<![CDATA[
383
392
<?php
384
- echo (new DateTime())->format('Y');
393
+ echo (new DateTime())->format('Y'), PHP_EOL;
394
+
385
395
// PHP 8.4.0 以降、囲む括弧は省略可能です。
386
- echo new DateTime()->format('Y');
396
+ echo new DateTime()->format('Y'), PHP_EOL ;
387
397
?>
388
398
]]>
389
399
</programlisting >
390
400
&example.outputs.similar;
391
401
<screen >
392
402
<![CDATA[
393
- 2016
403
+ 2025
404
+ 2025
394
405
]]>
395
406
</screen >
396
407
</example >
@@ -503,6 +514,14 @@ echo ($obj->bar)(), PHP_EOL;
503
514
<programlisting role =" php" >
504
515
<![CDATA[
505
516
<?php
517
+ class SimpleClass
518
+ {
519
+ function displayVar()
520
+ {
521
+ echo "Parent class\n";
522
+ }
523
+ }
524
+
506
525
class ExtendClass extends SimpleClass
507
526
{
508
527
// 親クラスのメソッドを再定義
@@ -754,9 +773,10 @@ Does\Not\Exist
754
773
namespace NS {
755
774
class ClassName {
756
775
}
776
+
777
+ $c = new ClassName();
778
+ print $c::class;
757
779
}
758
- $c = new ClassName();
759
- print $c::class;
760
780
?>
761
781
]]>
762
782
</programlisting >
@@ -787,7 +807,7 @@ NS\ClassName
787
807
<para >
788
808
<example >
789
809
<title >nullsafe 演算子</title >
790
- <programlisting role =" php" >
810
+ <programlisting role =" php" annotations = " non-interactive " >
791
811
<![CDATA[
792
812
<?php
793
813
0 commit comments