File: classobj.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (503 lines) | stat: -rw-r--r-- 15,208 bytes parent folder | download
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
<?xml version="1.0" encoding="iso-8859-1"?>
 <reference id="ref.classobj">
  <title>Klassen- und Objekt-Funktionen</title>
  <titleabbrev>Klassen/Objekte</titleabbrev>

  <partintro>
   <sect1 id="classobj.partintro">
    <title>Einfhrung</title>
    <sect2 id="classobj.intro">
     <title>About</title>
     <para>
      Diese Funktionen ermglichen Ihnen den Zugriff auf Informationen ber
      Klassen und Objektinstanzen. Sie knnen den Namen der Klasse ermitteln,
      zu der ein Objekt gehrt, sowie ihre Eigenschaften und
      -methoden. Mit diesen Funktionen knnen Sie nicht nur die 
      Klassenmitgliedschaft eines Objektes herausfinden, sondern auch
      ihre Abstammung (d. h. welche Klasse die des Objektes erweitert).
     </para>
    </sect2>
    <sect2 id="classobj.example">
     <title>Anwendungsbeispiel</title>
     <para>
      In diesem Beispiel definieren wir zuerst eine Basisklasse und eine
      Erweiterung dieser Klasse. Die Basisklasse beschreibt ein beliebiges
      Gemse, ob es ebar ist oder nicht, sowie seine Farbe. Die Subklasse
      <varname>Spinat</varname> fgt eine Methode hinzu, um sie zu kochen
      und eine weitere, um herauszufinden, ob sie gekocht ist.
     </para>
     <para>
      <example>
       <title>classes.inc</title>
       <programlisting role="php">
&lt;?php

// Basisklasse mit Eigenschaften und Methoden
class Gemuese {

    var $essbar;
    var $farbe;

    function Gemuese( $essbar, $farbe=&quot;grn&quot; ) {
        $this-&gt;essbar = $essbar;
        $this-&gt;farbe = $farbe;
    }

    function ist_essbar() {
        return $this-&gt;essbar;
    }

    function welche_farbe() {
        return $this-&gt;farbe;
    }
    
} // Ende der Klasse Gemuese


// erweitert die Basisklasse
class Spinat extends Gemuese {

    var $gekocht = false;

    function Spinat() {
        $this-&gt;Gemuese( true, &quot;grn&quot; );
    }

    function koche_es() {
        $this-&gt;gekocht = true;
    }

    function ist_gekocht() {
        return $this-&gt;gekocht;
    }
    
} // Ende der Klasse Spinat

?&gt;
       </programlisting>
      </example>
     </para>
     <para>
      Jetzt instantiieren wir zwei Objekte von diesen Klassen und geben
      Informationen ber sie aus, einschlielich ihrer Abstammung.
      Wir definieren auch einige Hilfsfunktionen, hauptschlich um eine
      hbsche Ausgabe der Variablen zu erhalten.
     </para>
     <para>
      <example>
       <title>test_script.php</title>
       <programlisting role="php">
&lt;pre&gt;
&lt;?php

include &quot;classes.inc&quot;;

// utility functions

function zeige_vars($obj) {
    $arr = get_object_vars($obj);
    while (list($prop, $val) = each($arr))
        echo &quot;\t$prop = $val\n&quot;;
}

function zeige_methoden($obj) {
    $arr = get_class_methods(get_class($obj));
    foreach ($arr as $method)
        echo &quot;\tfunction $method()\n&quot;;
}

function klassen_abstammung($obj, $class) {
    global $$obj;
    if (is_subclass_of($$obj, $class)) {
        echo &quot;Objekt $obj gehrt zur Klasse &quot;.get_class($$obj);
        echo &quot; einer Subklasse von $class\n&quot;;
    } else {
        echo &quot;Object $obj gehrt nicht zu einer Subklasse von $class\n&quot;;
    }
}

// Instantiiere zwei Objekte

$veggie = new Gemuese(true,&quot;blau&quot;);
$leafy = new Spinat();

// Informationen ber die Objekte ausgeben
echo &quot;veggie: KLASSE &quot;.get_class($veggie).&quot;\n&quot;;
echo &quot;leafy: KLASSE &quot;.get_class($leafy);
echo &quot;, ELTERN &quot;.get_parent_class($leafy).&quot;\n&quot;;

// Zeige Eigenschaften von veggie
echo &quot;\nveggie: Eigenschaften\n&quot;;
zeige_vars($veggie);

// und Methoden von leafy
echo &quot;\nleafy: Methoden\n&quot;;
zeige_methoden($leafy);

echo &quot;\nAbstammung:\n&quot;;
klassen_abstammung(&quot;leafy&quot;, &quot;Spinat&quot;);
klassen_abstammung(&quot;leafy&quot;, &quot;Gemuese&quot;);
?&gt;
&lt;/pre&gt;
       </programlisting>
      </example>
     </para>
     <para>
      Wichtig ist in diesem Beispiel, da das Objekt <varname>$leafy</varname> 
      eine Instanz der Klasse <varname>Spinat</varname> ist, die eine Subklasse
      von <varname>Gemuese</varname> ist. Darum gibt der letzte Teil des
      obigen Skripts folgendes aus:
     </para>
     <para>
      <informalexample>
       <programlisting>
       [...]
Abstammung:
Objekt leafy gehrt nicht zu einer Subklasse von Spinat
Objekt leafy gehrt zur Klasse spinat einer Subklasse von Gemuese
       </programlisting>
      </informalexample>
     </para>
    </sect2>
   </sect1>
  </partintro>

  <refentry id="function.call-user-method">
   <refnamediv>
    <refname>call_user_method</refname>
    <refpurpose>
     Aufruf einer benutzerdefinierten Methode eines bestimmten Objektes
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>mixed</type><methodname>call_user_method</methodname>
      <methodparam><type>string</type><parameter>method_name</parameter></methodparam>
      <methodparam><type>object</type><parameter>obj</parameter></methodparam>
      <methodparam choice="opt"><type>mixed</type><parameter>parameter</parameter></methodparam>
      <methodparam choice="opt"><type>mixed</type><parameter>...</parameter></methodparam>
     </methodsynopsis>
    <para>
     Ruft die durch <parameter>method_name</parameter> angegebene Methode des
     benutzerdefinierten Objektes <parameter>obj</parameter> auf. Ein
     Anwendungsbeispiel sehen Sie unten, wo wir eine Klasse definieren,
     ein Objekt instantiieren und <function>call_user_method</function>
     benutzen, um seine Methode <varname>zeige_info</varname> indirekt
     aufzurufen.
     <informalexample>
      <programlisting role="php">
&lt;?php
class Land {
    var $NAME;
    var $TLD;
    
    function Land($name, $tld) {
        $this-&gt;NAME = $name;
        $this-&gt;TLD = $tld;
    }

    function zeige_info($prestr=&quot;&quot;) {
        echo $prestr.&quot;Land: &quot;.$this-&gt;NAME.&quot;\n&quot;;
        echo $prestr.&quot;Top-Level-Domain: &quot;.$this-&gt;TLD.&quot;\n&quot;;
    }
}

$cntry = new Land(&quot;Peru&quot;,&quot;pe&quot;);

echo &quot;* Direkter Aufruf der Methode\n&quot;;
$cntry-&gt;zeige_info();

echo &quot;\n* Indirekter Aufruf derselben Methode\n&quot;;
call_user_method (&quot;zeige_info&quot;, $cntry, &quot;\t&quot;);
?&gt;
      </programlisting>
     </informalexample>
    </para>
    <simpara>
     Siehe auch <function>call_user_func</function>.
    </simpara>
   </refsect1>
  </refentry>

  <refentry id="function.class-exists">
   <refnamediv>
    <refname>class_exists</refname>
    <refpurpose>Prft, ob eine Klasse definiert ist</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>bool</type><methodname>class_exists</methodname>
      <methodparam><type>string</type><parameter>class_name</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion ergibt &true;, falls eine Klasse mit dem Namen
     <parameter>class_name</parameter> definiert ist,
     ansonsten &false;.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.get-class">
   <refnamediv>
    <refname>get_class</refname>
    <refpurpose>Gibt den Namen der Klasse eines Objektes zurck</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>string</type><methodname>get_class</methodname>
      <methodparam><type>object</type><parameter>obj</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion gibt den Namen der Klasse zurck, von der
     <parameter>obj</parameter> eine Instanz ist.
    </para>
    <simpara>
     Siehe auch <function>get_parent_class</function>,
     <function>is_subclass_of</function>
    </simpara>
   </refsect1>
  </refentry>

  <refentry id="function.get-class-methods">
   <refnamediv>
    <refname>get_class_methods</refname>
    <refpurpose>
     Liefert die Namen aller Methoden einer Klasse
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>array</type><methodname>get_class_methods</methodname>
      <methodparam><type>string</type><parameter>class_name</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion liefert ein String-Array zurck, das mit den Namen
     aller in der Klasse <parameter>class_name</parameter> definerten
     Methoden gefllt ist.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.get-class-vars">
   <refnamediv>
    <refname>get_class_vars</refname>
    <refpurpose>
     Liefert die Standard-Elemente einer Klasse
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>array</type><methodname>get_class_vars</methodname>
      <methodparam><type>string</type><parameter>class_name</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion liefert ein String-Array zurck, das mit den 
     Standard-Elementen der Klasse <parameter>class_name</parameter> 
     gefllt ist. Standard-Elemente sind all die Elemente, die bereits 
     in der Klassendefinition mit 'var' definiert wurden.
    </para>
   </refsect1>
  </refentry>

  <refentry id="function.get-declared-classes">
   <refnamediv>
    <refname>get_declared_classes</refname>
    <refpurpose>Gibt ein Array mit den Namen der definierten Klassen zurck</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>array</type><methodname>get_declared_classes</methodname>
      <void/>
     </methodsynopsis>
    <para>
     Diese Funktion gibt ein Array mit den Namen aller im aktuellen Skript
     definierten Klassen zurck.
    </para>
    <note>
     <para>
      In PHP 4.0.1pl2 werden drei zustzliche Klassen am Anfang des Array
      zurckgegeben: <classname>stdClass</classname> (definiert in 
      <filename>Zend/zend.c</filename>),
      <classname>OverloadedTestClass</classname> (definiert in
      <filename>ext/standard/basic_functions.c</filename>) 
      und <classname>Directory</classname>
      (definiert in <filename>ext/standard/dir.c</filename>).
     </para>
     <para>
      Abhngig von den Optionen, mit denen PHP kompiliert wurde, knnnen noch
      weitere Klassen vorhanden sein.
     </para>
    </note>
   </refsect1>
  </refentry>

  <refentry id="function.get-object-vars">
   <refnamediv>
    <refname>get_object_vars</refname>
    <refpurpose>Liefert die Elemente eines Objekts</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>array</type><methodname>get_object_vars</methodname>
      <methodparam><type>object</type><parameter>obj</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion gibt ein assoziatives Array der fr das angegebene
     Objekt <parameter>obj</parameter> definierten Eigenschaften zurck.
     Wenn Variablen der Klasse, von der <parameter>obj</parameter> eine
     Instanz ist, kein Wert zugewiesen wurde, werden diese nicht im
     Array zurckgegeben.
     <example>
      <title>Gebrauch von <function>get_object_vars</function></title>
      <programlisting role="php">
&lt;?php
class Punkt2D {
    var $x, $y;
    var $bezeichnung;

    function Punkt2D($x, $y) {
        $this-&gt;x = $x;
        $this-&gt;y = $y;
    }

    function setzeBezeichnung($bezeichnung) {
        $this-&gt;bezeichnung = $bezeichnung;
    }

    function gibPunkt() {
        return array("x" =&gt; $this-&gt;x,
                     "y" =&gt; $this-&gt;y,
                     "bezeichnung" =&gt; $this-&gt;bezeichnung);
    }
}

$p1 = new Punkt2D(1.233, 3.445);
print_r(get_object_vars($p1));
// "$bezeichnung" ist deklariert, aber nicht definiert
// Array
// (
//     [x] =&gt; 1.233
//     [y] =&gt; 3.445
// )

$p1-&gt;setzeBezeichnung("point #1");

print_r(get_object_vars($p1));
// Array
// (
//     [x] =&gt; 1.233
//     [y] =&gt; 3.445
//     [bezeichnung] =&gt; point #1
// )

?&gt;
      </programlisting>
     </example>
    </para>
    <simpara>
     Siehe auch <function>get_class_methods</function>,
     <function>get_class_vars</function>
    </simpara>
   </refsect1>
  </refentry>

  <refentry id="function.get-parent-class">
   <refnamediv>
    <refname>get_parent_class</refname>
    <refpurpose>Gibt den Namen der Elternklasse eines Objektes zurck</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>string</type><methodname>get_parent_class</methodname>
      <methodparam><type>object</type><parameter>obj</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion gibt den Namen der Elternklasse der Klasse zurck,
     von der <parameter>obj</parameter> eine Instanz ist.
    </para>
    <simpara>
     Siehe auch <function>get_class</function>,
     <function>is_subclass_of</function>
    </simpara>
   </refsect1>
  </refentry>

 <refentry id="function.is-subclass-of">
   <refnamediv>
    <refname>is_subclass_of</refname>
    <refpurpose>
     Bestimmt, ob ein Objekt zu einer Subklasse der angegebenen
     Klasse gehrt
    </refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>bool</type><methodname>is_subclass_of</methodname>
      <methodparam><type>object</type><parameter>obj</parameter></methodparam>
      <methodparam><type>string</type><parameter>superclass</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion ergibt &true;, falls das Objekt <parameter>obj</parameter>
     zu einer Subklasse von <parameter>superclass</parameter> gehrt,
     ansonsten &false;.
    </para>
    <simpara>
     Siehe auch <function>get_class</function>,
     <function>get_parent_class</function>
    </simpara>
   </refsect1>
  </refentry>

  <refentry id="function.method-exists">
   <refnamediv>
    <refname>method_exists</refname>
    <refpurpose>Prft, ob Methode in einer Klasse definiert ist</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Beschreibung</title>
     <methodsynopsis>
      <type>bool</type><methodname>method_exists</methodname>
      <methodparam><type>object</type><parameter>object</parameter></methodparam>
      <methodparam><type>string</type><parameter>method_name</parameter></methodparam>
     </methodsynopsis>
    <para>
     Diese Funktion liefert &true;, wenn eine Methode mit Namen
     <parameter>method_name</parameter> fr das in 
     <parameter>object</parameter> bergebene Objekt definiert 
     wurde, sonst &false;.
    </para>
    <para>
     Siehe auch <function>function_exists</function>
    </para>
   </refsect1>
  </refentry>

 </reference>

<!-- 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:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->