-
Notifications
You must be signed in to change notification settings - Fork 42
/
constants.xml
148 lines (141 loc) · 3.62 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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: fc174e8d6162091550edde46159917ee7e5a2e73 Maintainer: hholzgra Status: ready -->
<!-- Reviewed: yes -->
<!-- Rev-Revision: a9edd62d087ab1eb6292c795b7256e14ff9f1234 Reviewer: samesch -->
<!-- Credits: simp -->
<sect1 xml:id="language.oop5.constants" xmlns="http://docbook.org/ns/docbook">
<title>Klassenkonstanten</title>
<para>
Es ist möglich, <link linkend="language.constants">Konstanten</link> für
jede Klasse zu definieren, die gleich und unveränderlich bleiben. Die
standardmäßige Sichtbarkeit einer Klassenkonstante ist
<literal>public</literal>.
</para>
<note>
<para>
Klassenkonstanten können von einer Kindklasse neu definiert werden.
Ab PHP 8.1.0 können Klassenkonstanten nicht mehr von einer Kindklasse neu
definiert werden, wenn sie als
<link linkend="language.oop5.final">final</link> definiert ist.
</para>
</note>
<para>
Ein Interface kann ebenfalls <literal>Konstanten</literal> enthalten. Die
<link linkend="language.oop5.interfaces">Interface-Dokumentation</link>
enthält Beispiele dazu.
</para>
<para>
Es ist möglich, eine Variable als Klassenreferenz zu nutzen. Der
Variablenwert darf kein Schlüsselwort (wie <literal>self</literal>,
<literal>parent</literal> oder <literal>static</literal>) sein.
</para>
<para>
Es ist zu beachten, dass Klassenkonstanten nur einmal pro Klasse angelegt
werden und nicht für jedes Klassenexemplar.
</para>
<example>
<title>Eine Konstante definieren und benutzen</title>
<programlisting role="php">
<![CDATA[
<?php
class MyClass
{
const CONSTANT = 'Konstanter Wert';
function showConstant() {
echo self::CONSTANT . "\n";
}
}
echo MyClass::CONSTANT . "\n";
$classname = "MyClass";
echo $classname::CONSTANT . "\n";
$class = new MyClass();
$class->showConstant();
echo $class::CONSTANT."\n";
?>
]]>
</programlisting>
</example>
<para>
Die spezielle Konstante <constant>::class</constant> erlaubt die Auflösung
voll qualifizierter Klassennamen zur Kompilierzeit, was nützlich für Klassen
in Namensräumen ist:
</para>
<example>
<title>Beispiel für ::class in einem Namensraum</title>
<programlisting role="php">
<![CDATA[
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>
]]>
</programlisting>
</example>
<example>
<title>Beispiel für Ausdrücke mit Klassenkonstanten</title>
<programlisting role="php">
<![CDATA[
<?php
const ONE = 1;
class foo {
const TWO = ONE * 2;
const THREE = ONE + self::TWO;
const SENTENCE = 'Der Wert von THREE ist '.self::THREE;
}
?>
]]>
</programlisting>
</example>
<example>
<title>Sichtbarkeitsmodifizierer von Klassenkonstanten seit PHP 7.1.0</title>
<programlisting role="php">
<![CDATA[
<?php
class Foo {
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>
Von PHP 7.1.0 an sind Sichtbarkeitsmodifizierer für Klassenkonstanten
erlaubt.
</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
-->