-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathexamples.xml
180 lines (153 loc) · 3.97 KB
/
examples.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 62d53f70bd8d83c2b5abf2b6d39b53657a2f41ae Maintainer: seros Status: ready -->
<!-- Reviewed: yes Maintainer: seros -->
<appendix xml:id="classobj.examples">
&reftitle.examples;
<para>
En este ejemplo, primero definimos una clase base y una extensión
de la misma. La clase base describe una verdura en general,
si es comestible o no y cuál es su color. La subclase
<varname>Espinaca</varname> añade un método para cocinarla y otro para
averiguar si está cocinada.
</para>
<para>
<example>
<title>classes.inc</title>
<programlisting role="php">
<![CDATA[
<?php
// clase base con propiedades y métodos miembro
class Verdura {
var $comestible;
var $color;
function __construct($comestible, $color="verde")
{
$this->comestible = $comestible;
$this->color = $color;
}
function es_comestible()
{
return $this->comestible;
}
function qué_color()
{
return $this->color;
}
} // fin de la clase Verdura
// ampliar la clase base
class Espinaca extends Verdura {
var $concinada = false;
function __construct()
{
parent::__construct(true, "verde");
}
function cocinarla()
{
$this->concinada = true;
}
function está_cocinada()
{
return $this->concinada;
}
} // fin de la clase Espinaca
?>
]]>
</programlisting>
</example>
</para>
<para>
Entonces instanciamos dos objetos de estas clases e imprimimos
la información sobre ellos, incluida su linaje de clases.
También definimos algunas funciones de utilidad, prinpipalmente para tener una impresión atractiva
de las variables.
</para>
<para>
<example>
<title>test_script.php</title>
<programlisting role="php">
<![CDATA[
<pre>
<?php
include "classes.inc";
// funciones de utilidad
function imprimir_vars($obj)
{
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
function imprimir_métodos($obj)
{
$arr = get_class_methods(get_class($obj));
foreach ($arr as $método) {
echo "\tfunción $método()\n";
}
}
function linaje_de_clases($obj, $clase)
{
if (is_subclass_of($GLOBALS[$obj], $clase)) {
echo "El objeto $obj pertenece a la clase " . get_class($GLOBALS[$obj]);
echo ", una subclase de $clase\n";
} else {
echo "El objeto $obj no pertenece a una subclase de $clase\n";
}
}
// instancias 2 objetos
$vegetariano = new Verdura(true, "blue");
$frondoso = new Espinaca();
// imprimir información sobre los objetos
echo "vegetariano: CLASE " . get_class($vegetariano) . "\n";
echo "frondoso: CLASE " . get_class($frondoso);
echo ", MADRE " . get_parent_class($frondoso) . "\n";
// mostrar las propiedades de vegetariano
echo "\nvegetariano: Propiedades\n";
imprimir_vars($vegetariano);
// y los métodos de frondoso
echo "\nfrondoso: Métodos\n";
imprimir_métodos($frondoso);
echo "\nLinaje:\n";
linaje_de_clases("frondoso", "Espinaca");
linaje_de_clases("frondoso", "Verdura");
?>
</pre>
]]>
</programlisting>
<para>
Una cosa importanete a observar en el ejemplo anterior es que
el objeto <varname>$frondoso</varname> es una instancia de la clase
<classname>Espinaca</classname> que es una subclase de
<classname>Verdura</classname>,
por lo tanto, la última parte del script anterior imprimirá:
</para>
<screen>
<![CDATA[
[...]
Linaje:
El objeto frondoso no pertenece a una subclase de Espinaca
El objeto frondoso pertenece a la clase Espinaca, una subclase de Verdura
]]>
</screen>
</example>
</para>
</appendix>
<!-- 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
-->