forked from php/doc-pt_br
-
Notifications
You must be signed in to change notification settings - Fork 0
/
constants.xml
376 lines (348 loc) · 12.4 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
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 5a945dfef09a9595c83855cdb858ffa4a96af305 Maintainer: ae Status: ready --><!-- CREDITS: ae,thiago,lcobucci,fabioluciano,lisaldo,geekcom,@gabrielsanva -->
<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 as <link linkend="language.constants.magic">
constantes mágicas</link>, que não são constantes de verdade).
As constantes são case-sensitive por padrão. Por convenção,
identificadores de constantes são sempre em maiúsculas.
</simpara>
<note>
<para>
Anteriormente ao PHP 8.0.0, constantes definidas através da fundção <function>define</function>
podiam ser case-insentivo.
</para>
</note>
<para>
O nome de uma constante tem as mesmas regras de qualquer rótulo do PHP. Um
nome válido de constante começa com uma letra ou sublinhado, seguido
por qualquer número de letras, números ou sublinhados. Como uma expressão
regular, pode ser representada por:
<code>^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$</code>
</para>
<para>
É permitido utilizar <function>define</function> em constantes com,
nomes reservados ou mesmo inválidos, cujo valor somente pode ser recuperado com
<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álidas
define("2FOO", "alguma coisa");
// Isto é válido, mas deve ser evitado:
// O PHP pode vir a fornercer uma constante mágica
// que danificará seu script
define("__FOO__", "alguma coisa");
?>
]]>
</programlisting>
</example>
</para>
<note>
<simpara>
Para nossos exemplos, uma letra é a-z, A-Z e os caracteres ASCII
do 128 ao 255 (0x80-0xff).
</simpara>
</note>
<simpara>
Como as &link.superglobals;, o escopo de uma constante é global.
Pode-se acessar constantes de qualquer lugar em seu script sem se preocupar
com o escopo. Para mais informações sobre o escopo no PHP, 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, constantes de classe podem ser declaradas com visibilidade protected
ou private, tornando-as disponíveis apenas no escopo da
classe onde elas foram declaradas.
</simpara>
</note>
<sect1 xml:id="language.constants.syntax">
<title>Sintaxe</title>
<simpara>
Constantes podem ser definidas utilizando a declaração <literal>const</literal>
ou através da 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 descritas abaixo.
Uma vez definida, a constante não poderá ser modificada ou
anulada.
</simpara>
<simpara>
Quando usando a declaração <literal>const</literal>,
somente valores escalares (<type>bool</type>, <type>int</type>,
<type>float</type> e <type>string</type>) e
<type>array</type> constantes contendo apenas valores escalares são aceitos.
É possível definir constantes como um <type>resource</type>,
mas isso deve ser evitado, pois pode ocasionar resultados inesperados.
</simpara>
<simpara>
O valor da costante é acessado simplesmente informando seu nome.
Diferentemente de variáveis, você <emphasis>não</emphasis> prefixará uma
constante com um sinal de <literal>$</literal>.
Também pode-se utilizar a função <function>constant</function> para
ler o valor de uma constante se o nome da constante for obtida dinamicamente.
Utilize <function>get_defined_constants</function> para obter a lista de
todas as constantes definidas.
</simpara>
<note>
<simpara>
As constantes e variáveis (globais) estão em espaços de nomes diferentes.
Isto implica, por exemplo, que &true; e
<varname>$TRUE</varname> sejam geralmente diferentes.
</simpara>
</note>
<simpara>
Se uma constante não definida é usada, um erro <classname>Error</classname> é lançado.
Anteriormente ao PHP 8.0.0, constantes não definidas eram interpretadas como uma
<type>string</type> comum, no caso, uma variável string contendo o nome da própria constante.
Esse mecanismo alternativo ficou obsoleto no PHP 7.2.0, e um alerta nível
<constant>E_WARNING</constant> é lançado quando isso acontecer.
Anteriormente ao PHP 7.2.0, um alerta
<link linkend="ref.errorfunc">E_NOTICE</link> era lançado.
Veja também porque
<link linkend="language.types.array.foo-bar">$foo[bar]</link> é
errado a não ser que <literal>bar</literal> seja uma constante.
Isto não se aplica às <link
linkend="language.namespaces.rules">constantes qualificadas</link>,
quais sempre lançam um <classname>Error</classname> se não definidas.
</simpara>
<note>
<simpara>
Para conferir se uma constante está definida, utilize 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 possuem um sinal de cifrão (<literal>$</literal>)
antes delas;
</simpara>
</listitem>
<listitem>
<simpara>
Constantes podem ser definidas e acessadas de qualquer lugar sem
que a regras de escopo de variáveis sejam aplicadas;
</simpara>
</listitem>
<listitem>
<simpara>
Constantes não podem ser redefinidas ou eliminadas depois
de criadas; 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("CONSTANT", "Hello world.");
echo CONSTANT; // imprime "Hello world."
echo Constant; // Lança um erro Error: Undefined constant "Constant"
// Anteriormente ao PHP 8.0.0, imprimia "Constant" e emitia um warning.
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Definindo Constantes usando a palavra-chave <literal>const</literal></title>
<programlisting role="php">
<![CDATA[
<?php
// Simple scalar value
const CONSTANT = 'Hello World';
echo CONSTANT;
// Scalar expression
const ANOTHER_CONST = CONSTANT.'; Goodbye World';
echo ANOTHER_CONST;
const ANIMALS = array('dog', 'cat', 'bird');
echo ANIMALS[1]; // imprime "cat"
// Array constante
define('ANIMALS', array(
'dog',
'cat',
'bird'
));
echo ANIMALS[1]; // imprime "cat"
?>
]]>
</programlisting>
</example>
</para>
<note>
<para>
Ao contrário das constantes definidas através de <function>define</function>,
as constantes definidas usando a declaração <literal>const</literal> devem
ser declaradas no maior escopo que elas serão utiluzadas, em tempo de compilação.
Isto significa que constantes não podem ser declaradas dentro de funções, loops,
<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">Class Constants</link></member>
</simplelist>
</para>
</sect2>
</sect1>
<sect1 xml:id="language.constants.predefined">
<title>Constantes Mágicas</title>
<simpara>
O PHP fornece um grande número de <link
linkend="reserved.constants">constantes predefinidas</link> para qualquer
script que execute. A maioria dessas constantes, entretanto, são
criadas por várias extensões, e estarão presentes somente quando essas
extensões estiverem disponíveis, tanto por carregamento dinâmico quanto por
compilação direta.
</simpara>
</sect1>
<sect1 xml:id="language.constants.magic">
<title>Constantes mágicas</title>
<para>
Há nove constantes mágicas, que mudam dependendo de
onde são utilizadas. Por exemplo, o valor de
<constant>__LINE__</constant> depende da linha em que é
utilizada em seu 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 são case-insentitive e estão descritas a seguir:
</para>
<para>
<table>
<title>Algumas 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 corrente do arquivo.
</entry>
</row>
<row xml:id="constant.file">
<entry><constant>__FILE__</constant></entry>
<entry>
O caminho completo e nome do arquivo com links simbólicos resolvidos. Se utilizado 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 usado dentro de um include,
o diretório do arquivo incluído é retornado. É equivalente
a <literal>dirname(__FILE__)</literal>. O nome do diretório
não possui barra no final, a não ser que seja o diretório raiz.
</entry>
</row>
<row xml:id="constant.function">
<entry><constant>__FUNCTION__</constant></entry>
<entry>
O nome da função, or <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 declarado (por exemplo, <literal>Foo\Bar</literal>).
Quando utilizada
em um método trait, __CLASS__ é o nome da classe
que está utilizando a trait.
</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.namespace">
<entry><constant>__NAMESPACE__</constant></entry>
<entry>
O nome do namespace corrente.
</entry>
</row>
<row xml:id="constant.coloncolonclass">
<entry><constant><replaceable>ClassName</replaceable>::class</constant></entry>
<entry>
O nome qualificado completo 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
-->