-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathstatic.xml
More file actions
159 lines (138 loc) · 4.19 KB
/
Copy pathstatic.xml
File metadata and controls
159 lines (138 loc) · 4.19 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
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 888507ca9ed7a8517edbf2d00a64fcaf5865aa23 Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="language.oop5.static" xmlns="http://docbook.org/ns/docbook">
<title>Statique</title>
<tip>
<simpara>
Cette page décrit l'utilisation du mot clé <literal>static</literal>
qui permet de définir des méthodes et des propriétés statiques.
<literal>static</literal> peut aussi être utilisé pour
<link linkend="language.variables.scope.static">définir des variables statiques</link>,
<link linkend="functions.anonymous-functions.static">définir des fonctions anonymes statiques</link>
et pour <link linkend="language.oop5.late-static-bindings">des Résolutions statiques à la volée</link>.
Se reporter à ces pages pour plus d'informations sur la signification de
<literal>static</literal>.
</simpara>
</tip>
<para>
Le fait de déclarer des propriétés ou des méthodes comme statiques
permet d'y accéder sans avoir besoin d'instancier la classe.
Celles-ci peuvent également être accédées statiquement depuis une instance d'objet.
</para>
<sect2 xml:id="language.oop5.static.methods">
<title>Méthodes statiques</title>
<para>
Comme les méthodes statiques peuvent être appelées sans qu'une instance
d'objet n'ait été créée, la pseudo-variable <varname>$this</varname> n'est pas
disponible dans les méthodes déclarées comme statiques.
</para>
<warning>
<para>
Appeler une méthode non-statique statiquement lancera une <classname>Error</classname>.
</para>
<para>
Avant PHP 8.0.0, appeler une méthode non-statique statiquement était obsolète,
et générait un avertissement <constant>E_DEPRECATED</constant>.
</para>
</warning>
<example>
<title>Exemple avec une méthode statique</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public static function aStaticMethod() {
// ...
}
}
Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod();
?>
]]>
</programlisting>
</example>
</sect2>
<sect2 xml:id="language.oop5.static.properties">
<title>Propriétés statiques</title>
<para>
Les propriétés statiques sont accédées en utilisant l'
<link linkend="language.oop5.paamayim-nekudotayim">opérateur de résolution de portée</link>
(<literal>::</literal>) et ne peuvent pas être accédées à travers l'opérateur
objet (<literal>-></literal>).
</para>
<para>
Il est possible de référencer la classe en utilisant une variable.
La valeur de la variable ne peut être un mot-clé (par exemple <literal>self</literal>,
<literal>parent</literal> et <literal>static</literal>).
</para>
<example>
<title>Exemple avec une propriété statique</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo
{
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
class Bar extends Foo
{
public function fooStatic() {
return parent::$my_static;
}
}
print Foo::$my_static . "\n";
$foo = new Foo();
print $foo->staticValue() . "\n";
print $foo->my_static . "\n"; // "Propriété" my_static non définie
print $foo::$my_static . "\n";
$classname = 'Foo';
print $classname::$my_static . "\n";
print Bar::$my_static . "\n";
$bar = new Bar();
print $bar->fooStatic() . "\n";
?>
]]>
</programlisting>
&example.outputs.8.similar;
<screen>
<![CDATA[
foo
foo
Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23
Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23
foo
foo
foo
foo
]]>
</screen>
</example>
</sect2>
</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
-->