1
0
mirror of https://github.com/php/doc-ja.git synced 2026-04-25 17:08:10 +02:00
Files
archived-doc-ja/language/oop5/references.xml
T
2021-10-09 02:40:05 +09:00

91 lines
2.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Maintainer: takagi Status: ready -->
<sect1 xml:id="language.oop5.references" xmlns="http://docbook.org/ns/docbook">
<title>オブジェクトと参照</title>
<para>
PHP でのオブジェクト指向プログラミングのポイントとしてよく言われるのは
「オブジェクトはデフォルトでは参照渡しとなります」ということです。
しかし、正確には少し異なります。
この節では、いくつかの例を用いてその誤解をといていきます。
</para>
<para>
PHP の参照は一種のエイリアスで、ふたつの異なる変数に同じ値を書き込めるものです。
PHP では、オブジェクト変数の値にオブジェクト自身は含まれません。
含まれるのはオブジェクトの ID のみで、
これを用いて実際のオブジェクトにアクセスできるようになっています。
オブジェクトが引数として渡されたり戻り値となったり
あるいは別の変数に代入されたりした場合、
それはエイリアスではありません。ID のコピーを保持し、
同じオブジェクトを指すようになるのです。
</para>
<example>
<title>参照とオブジェクト</title>
<programlisting role="php">
<![CDATA[
<?php
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // $a と $b は同じ ID を持つコピーです
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // $c と $d は参照です
// ($c,$d) = <id>
$d->foo = 2;
echo $c->foo."\n";
$e = new A;
function foo($obj) {
// ($obj) = ($e) = <id>
$obj->foo = 2;
}
foo($e);
echo $e->foo."\n";
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
2
2
2
]]>
</screen>
</example>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->