-
Notifications
You must be signed in to change notification settings - Fork 106
/
Copy pathconstants.xml
384 lines (356 loc) · 12.8 KB
/
constants.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
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
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: f4f96ef8b2a95283c92ea2183fe1dedf06f3ad22 Maintainer: leonardolara Status: ready --><!-- CREDITS: ae,thiago,lcobucci,fabioluciano,lisaldo,geekcom,gabrielsanva,leonardolara -->
<chapter xml:id="language.constants" xmlns="http://docbook.org/ns/docbook">
<title>Constantes</title>
<simpara>
Uma constante é um identificador (nome) para um valor simples. Como o nome
sugere, esse valor não pode mudar durante a execução do
script (exceto para as <link linkend="language.constants.magic">
constantes mágicas</link>, que na verdade não são constantes).
As constantes diferenciam maiúsculas de minúsculas. Por convenção,
identificadores de constantes são sempre em maiúsculas.
</simpara>
<note>
<para>
Antes do PHP 8.0.0, as constantes definidas usando a função <function>define</function>
podem não diferenciar maiúsculas de minúsculas.
</para>
</note>
<para>
O nome de uma constante segue as mesmas regras de qualquer rótulo no PHP. Um
nome de constante válido começa com uma letra ou sublinhado, seguido
por qualquer número de letras, números ou sublinhados. Como uma expressão
regular, seria expresso assim:
<code>^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
</para>
<para>
É possível usar <function>define</function> para definir constantes com nomes reservados
ou mesmo inválidos, cujo valor só pode ser recuperado com
a função <function>constant</function>. No entanto, isso não é recomendado.
</para>
&tip.userlandnaming;
<para>
<!-- TODO Move into syntax section? -->
<example>
<title>Nomes de constantes válidos e inválidos</title>
<programlisting role="php">
<![CDATA[
<?php
// Nomes de constantes válidos
define("FOO", "alguma coisa");
define("FOO2", "alguma outra coisa");
define("FOO_BAR", "alguma coisa mais");
// Nomes de constantes inválidos
define("2FOO", "alguma coisa");
// Isso é válido, mas deve ser evitado:
// O PHP pode um dia fornecer uma constante mágica
// que quebrará seu script
define("__FOO__", "alguma coisa");
?>
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
Para os exemplos aqui, uma letra é a-z, A-Z e os caracteres ASCII
de 128 a 255 (0x80-0xff).
</simpara>
</note>
<simpara>
Como as &link.superglobals;, o escopo de uma constante é global.
As constantes podem ser acessadas de qualquer lugar em um script, independentemente do escopo.
Para mais informações sobre escopo, leia a seção
do manual <link linkend="language.variables.scope">escopo de variáveis</link>.
</simpara>
<note>
<simpara>
A partir do PHP 7.1.0, as constantes de classe podem ser declaradas com visibilidade protected
ou private, tornando-as disponíveis apenas no escopo hierárquico da
classe em que foram definidas.
</simpara>
</note>
<sect1 xml:id="language.constants.syntax">
<title>Sintaxe</title>
<simpara>
As constantes podem ser definidas usando a palavra-chave <literal>const</literal>
ou usando a função <function>define</function>.
Enquanto <function>define</function> permite que uma constante seja
definida usando uma expressão arbitrária, a palavra-chave <literal>const</literal> possui
restrições, conforme descrito no próximo parágrafo.
Uma vez definida, a constante nunca poderá ser modificada ou
anulada.
</simpara>
<simpara>
Ao usar a palavra-chave <literal>const</literal>,
somente expressões escalares (<type>bool</type>, <type>int</type>,
<type>float</type> e <type>string</type>) e
<type>array</type>s constantes contendo apenas expressões escalares são aceitos.
É possível definir constantes como um <type>resource</type>,
mas isso deve ser evitado, pois pode causar resultados inesperados.
</simpara>
<simpara>
O valor de uma costante é acessado simplesmente informando seu nome.
Ao contrário das variáveis, uma constante <emphasis>não</emphasis> é precedida
por um <literal>$</literal>.
Também é possível usar a função <function>constant</function> para
ler o valor de uma constante se o nome da constante for obtido dinamicamente.
Use <function>get_defined_constants</function> para obter uma lista de
todas as constantes definidas.
</simpara>
<note>
<simpara>
As constantes e variáveis (globais) estão em espaços de nomes diferentes.
Isso implica que, por exemplo, &true; e
<varname>$TRUE</varname> são geralmente diferentes.
</simpara>
</note>
<simpara>
Se uma constante indefinida for usada, um erro <classname>Error</classname> será lançado.
Antes do PHP 8.0.0, constantes indefinidas eram interpretadas como uma simples
<type>string</type>, ou seja, CONSTANTE vs. "CONSTANTE".
Esse mecanismo alternativo foi descontinuado a partir do PHP 7.2.0 e um alerta de nível
<constant>E_WARNING</constant> será lançado quando isso acontecer.
Antes do PHP 7.2.0, um erro de nível
<link linkend="ref.errorfunc">E_NOTICE</link> era lançado.
Veja também por que
<link linkend="language.types.array.foo-bar">$foo[bar]</link> é
errado (a não ser que <literal>bar</literal> seja uma constante).
Isso não se aplica às <link
linkend="language.namespaces.rules">constantes (totalmente) qualificadas</link>,
que sempre lançarão um <classname>Error</classname> se forem indefinidas.
</simpara>
<note>
<simpara>
Para verificar se uma constante está definida, use a função <function>defined</function>.
</simpara>
</note>
<para>
Estas são as diferenças entre constantes e variáveis:
<itemizedlist>
<listitem>
<simpara>
Constantes não têm um cifrão (<literal>$</literal>)
antes delas;
</simpara>
</listitem>
<listitem>
<simpara>
Constantes podem ser definidas e acessadas em qualquer lugar sem considerar
as regras de escopo de variáveis;
</simpara>
</listitem>
<listitem>
<simpara>
Constantes não podem ser redefinidas ou anuladas depois de
definidas; e
</simpara>
</listitem>
<listitem>
<simpara>
Constantes só podem ter valores escalares ou arrays.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
<example>
<title>Definindo Constantes</title>
<programlisting role="php">
<![CDATA[
<?php
define("CONSTANTE", "Olá Mundo.");
echo CONSTANTE; // imprime "Olá Mundo."
echo Constante; // Lança um erro Error: Undefined constant "Constante"
// Antes do PHP 8.0.0, imprime "Constante" e emite um aviso.
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Definindo Constantes usando a palavra-chave <literal>const</literal></title>
<programlisting role="php">
<![CDATA[
<?php
// Valor escalar simples
const CONSTANTE = 'Olá Mundo';
echo CONSTANTE;
// Expressão escalar
const OUTRA_CONSTANTE = CONSTANTE . '; Adeus Mundo';
echo OUTRA_CONSTANTE;
const ANIMAIS = array('cachorro', 'gato', 'pássaro');
echo ANIMAIS[1]; // imprime "gato"
// Array constante
define('ANIMAIS', array(
'cachorro',
'gato',
'pássaro'
));
echo ANIMAIS[1]; // imprime "gato"
?>
]]>
</programlisting>
</example>
</para>
<note>
<para>
Ao contrário das constantes definidas usando <function>define</function>,
as constantes definidas usando a palavra-chave <literal>const</literal> devem
ser declaradas no escopo mais externo porque são definidas em tempo de compilação.
Isto significa que constantes não podem ser declaradas dentro de funções, loops,
declarações <literal>if</literal> ou
blocos <literal>try</literal>/<literal>catch</literal>.
</para>
</note>
<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.oop5.constants">Constantes de Classe</link></member>
</simplelist>
</para>
</sect2>
</sect1>
<sect1 xml:id="language.constants.predefined">
<title>Constantes Predefinidas</title>
<simpara>
O PHP fornece um grande número de <link
linkend="reserved.constants">constantes predefinidas</link> para qualquer
script executado. Muitas dessas constantes, no entanto, são criadas por
várias extensões e só estarão presentes quando essas extensões
estiverem disponíveis, seja por carregamento dinâmico ou porque foram
compiladas.
</simpara>
</sect1>
<sect1 xml:id="language.constants.magic">
<title>Constantes Mágicas</title>
<para>
Existem algumas constantes mágicas que mudam dependendo de
onde são usadas. Por exemplo, o valor de
<constant>__LINE__</constant> depende da linha em que é
usada no script. Todas essas constantes "mágicas" são resolvidas
em tempo de compilação, ao contrário das constantes regulares, que são resolvidas em tempo de execução.
Essas constantes especiais não diferenciam maiúsculas de minúsculas e são as seguintes:
</para>
<para>
<table>
<title>Constantes Mágicas do PHP</title>
<tgroup cols="2">
<thead>
<row>
<entry>&Name;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row xml:id="constant.line">
<entry><constant>__LINE__</constant></entry>
<entry>
O número da linha atual do arquivo.
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
O caminho completo e o nome do arquivo com links simbólicos resolvidos. Se usada dentro de um include,
o nome do arquivo incluído será retornado.
</entry>
</row>
<row xml:id="constant.dir">
<entry><constant>__DIR__</constant></entry>
<entry>
O diretório do arquivo. Se usada dentro de um include,
o diretório do arquivo incluído será retornado. Isso é equivalente
a <literal>dirname(__FILE__)</literal>. O nome do diretório
não possui barra no final, a menos que seja o diretório raiz.
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
O nome da função ou <literal>{closure}</literal> para funções anônimas.
</entry>
</row>
<row xml:id="constant.class">
<entry><constant>__CLASS__</constant></entry>
<entry>
O nome da classe. O nome da classe inclui o namespace
em que foi declarada (por exemplo, <literal>Foo\Bar</literal>).
Quando usada dentro de um método de trait,
<constant>__CLASS__</constant> é o nome da classe em que o trait
for usado.
</entry>
</row>
<row xml:id="constant.trait">
<entry><constant>__TRAIT__</constant></entry>
<entry>
O nome do trait. O nome do trait inclui o namespace em
que foi declarado (por exemplo, <literal>Foo\Bar</literal>).
</entry>
</row>
<row xml:id="constant.method">
<entry><constant>__METHOD__</constant></entry>
<entry>
O nome do método da classe.
</entry>
</row>
<row xml:id="constant.property">
<entry><constant>__PROPERTY__</constant></entry>
<entry>
Válido somente dentro de um
<link linkend="language.oop5.property-hooks">gancho de propriedade</link>.
É igual ao nome da propriedade.
</entry>
</row>
<row xml:id="constant.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
O nome do namespace atual.
</entry>
</row>
<row xml:id="constant.coloncolonclass">
<entry><constant><replaceable>ClassName</replaceable>::class</constant></entry>
<entry>
O nome totalmente qualificado da classe.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<sect2 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><link linkend="language.oop5.basic.class.class">::class</link></member>
<member><function>get_class</function></member>
<member><function>get_object_vars</function></member>
<member><function>file_exists</function></member>
<member><function>function_exists</function></member>
</simplelist>
</para>
</sect2>
</sect1>
</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
-->