-
Notifications
You must be signed in to change notification settings - Fork 724
/
constants.xml
155 lines (147 loc) · 3.49 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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<sect1 xml:id="language.oop5.constants" xmlns="http://docbook.org/ns/docbook">
<title>Class Constants</title>
<para>
It is possible to define constant values on a per-class basis remaining the
same and unchangeable. Constants differ from normal variables in that you
don't use the <varname>$</varname> symbol to declare or use them.
The default visibility of class constants is <literal>public</literal>.
</para>
<para>
The value must be a constant expression, not (for example) a variable, a
property, or a function call.
</para>
<para>
It's also possible for interfaces to have <literal>constants</literal>. Look at
the <link linkend="language.oop5.interfaces">interface documentation</link> for
examples.
</para>
<para>
As of PHP 5.3.0, it's possible to reference the class using a variable.
The variable's value can not be a keyword (e.g. <literal>self</literal>,
<literal>parent</literal> and <literal>static</literal>).
</para>
<para>
Note that class constants are allocated once per class, and not for each
class instance.
</para>
<example>
<title>Defining and using a constant</title>
<programlisting role="php">
<![CDATA[
<?php
class MyClass
{
const CONSTANT = 'constant value';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n"; // As of PHP 5.3.0
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n"; // As of PHP 5.3.0
?>
]]>
</programlisting>
</example>
<example>
<title>Static data example</title>
<programlisting role="php">
<![CDATA[
<?php
class foo {
// As of PHP 5.3.0
const BAR = <<<'EOT'
bar
EOT;
// As of PHP 5.3.0
const BAZ = <<<EOT
baz
EOT;
}
?>
]]>
</programlisting>
</example>
<note>
<para>
Support for initializing constants with Heredoc and Nowdoc syntax was added in PHP 5.3.0.
</para>
</note>
<example>
<title>Constant expression example</title>
<programlisting role="php">
<![CDATA[
<?php
const ONE = 1;
class foo {
// As of PHP 5.6.0
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'The value of THREE is '.self::THREE;
}
?>
]]>
</programlisting>
<para>
It is possible to provide a scalar expression involving numeric and string literals and/or constants in context of a class constant.
</para>
</example>
<note>
<para>
Constant expression support was added in PHP 5.6.0.
</para>
</note>
<example>
<title>Class constant visibility modifiers</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo {
// As of PHP 7.1.0
public const BAR = 'bar';
private const BAZ = 'baz';
}
echo Foo::BAR, PHP_EOL;
echo Foo::BAZ, PHP_EOL;
?>
]]>
</programlisting>
&example.outputs.71;
<screen>
<![CDATA[
bar
Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
]]>
</screen>
</example>
<note>
<para>
As of PHP 7.1.0 visibility modifiers are allowed for class constants.
</para>
</note>
</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
-->