-
Notifications
You must be signed in to change notification settings - Fork 49
/
references.xml
87 lines (76 loc) · 2.08 KB
/
references.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5c05004b296957e2744d32ebfacc362871422b66 Maintainer: chuso Status: ready -->
<sect1 xml:id="language.oop5.references" xmlns="http://docbook.org/ns/docbook">
<title>Objetos y referencias</title>
<para>
Uno de los puntos clave de la POO de PHP 5 que a menudo se menciona es que
"por omisión los objetos se pasan por referencia". Esto no es completamente
cierto. Esta sección rectifica esa creencia general, usando algunos ejemplos.
</para>
<para>
Una referencia en PHP es un alias, que permite a dos variables diferentes escribir
sobre un mismo valor. Desde PHP 5, una variable de tipo objeto ya no contiene el
objeto en sí como valor. Únicamente contiene un identificador del objeto que le permite
localizar al objeto real. Cuando se pasa un objeto como parámetro, o se devuelve como
retorno, o se asigna a otra variable, las distintas variables no son alias: guardan una
copia del identificador, que apunta al mismo objeto.
</para>
<example>
<title>Referencias y Objetos</title>
<programlisting role="php">
<![CDATA[
<?php
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // $a y $b son copias del mismo identificador
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // $c y $d son referencias
// ($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
-->