-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathextending.xml
More file actions
103 lines (96 loc) · 2.3 KB
/
extending.xml
File metadata and controls
103 lines (96 loc) · 2.3 KB
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: fa6e196973e45c0013c0801e01697757f4b98426 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="reflection.extending" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Étendre les classes</title>
<para>
Pour créer une version spéciale de
la classe interne (par exemple, pour créer une portion
HTML mise en évidence lors de l'export, pour avoir un accès
facile aux variables des membres au lieu des variables des
méthodes, ou bien pour avoir des méthodes utiles), il est possible
d'étendre la classe principale.
</para>
<example>
<title>Étendre les classes internes</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Ma classe Reflection_Method
*/
class My_Reflection_Method extends ReflectionMethod
{
public $visibility = array();
public function __construct($o, $m)
{
parent::__construct($o, $m);
$this->visibility = Reflection::getModifierNames($this->getModifiers());
}
}
/**
* Demo classe #1
*
*/
class T {
protected function x() {}
}
/**
* Demo classe #2
*
*/
class U extends T {
function x() {}
}
// Affichage des informations
var_dump(new My_Reflection_Method('U', 'x'));
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
object(My_Reflection_Method)#1 (3) {
["visibility"]=>
array(1) {
[0]=>
string(6) "public"
}
["name"]=>
string(1) "x"
["class"]=>
string(1) "U"
}
]]>
</screen>
</example>
<caution>
<para>
Si l'on écrase le constructeur, il faut se rappeler d'appeler
le constructeur parent avant d'insérer le moindre code.
Si on ne le fait pas, voici ce qui arrivera :
<literal>Fatal error: Internal error: Failed to retrieve the reflection object</literal>
</para>
</caution>
</chapter>
<!-- 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
-->