<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Class Constants</title> </head> <body><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.properties.html">Properties</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.autoload.html">Autoloading Classes</a></div> <div class="up"><a href="language.oop5.html">Classes and Objects</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div><hr /><div id="language.oop5.constants" class="sect1"> <h2 class="title">Class Constants</h2> <p class="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 <var class="varname"><var class="varname">$</var></var> symbol to declare or use them. The default visibility of class constants is <em>public</em>. </p> <p class="para"> The value must be a constant expression, not (for example) a variable, a property, or a function call. </p> <p class="para"> It's also possible for interfaces to have <em>constants</em>. Look at the <a href="language.oop5.interfaces.html" class="link">interface documentation</a> for examples. </p> <p class="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. <em>self</em>, <em>parent</em> and <em>static</em>). </p> <p class="para"> Note that class constants are allocated once per class, and not for each class instance. </p> <div class="example" id="example-182"> <p><strong>Example #1 Defining and using a constant</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">MyClass<br /></span><span style="color: #007700">{<br /> const </span><span style="color: #0000BB">CONSTANT </span><span style="color: #007700">= </span><span style="color: #DD0000">'constant value'</span><span style="color: #007700">;<br /><br /> function </span><span style="color: #0000BB">showConstant</span><span style="color: #007700">() {<br /> echo </span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">CONSTANT </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /> }<br />}<br /><br />echo </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">::</span><span style="color: #0000BB">CONSTANT </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$classname </span><span style="color: #007700">= </span><span style="color: #DD0000">"MyClass"</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">$classname</span><span style="color: #007700">::</span><span style="color: #0000BB">CONSTANT </span><span style="color: #007700">. </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// As of PHP 5.3.0<br /><br /></span><span style="color: #0000BB">$class </span><span style="color: #007700">= new </span><span style="color: #0000BB">MyClass</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">$class</span><span style="color: #007700">-></span><span style="color: #0000BB">showConstant</span><span style="color: #007700">();<br /><br />echo </span><span style="color: #0000BB">$class</span><span style="color: #007700">::</span><span style="color: #0000BB">CONSTANT</span><span style="color: #007700">.</span><span style="color: #DD0000">"\n"</span><span style="color: #007700">; </span><span style="color: #FF8000">// As of PHP 5.3.0<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="example-183"> <p><strong>Example #2 Static data example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// As of PHP 5.3.0<br /> </span><span style="color: #007700">const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= <<<'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br /> </span><span style="color: #FF8000">// As of PHP 5.3.0<br /> </span><span style="color: #007700">const </span><span style="color: #0000BB">BAZ </span><span style="color: #007700">= <<<EOT<br /></span><span style="color: #DD0000">baz<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <blockquote class="note"><p><strong class="note">Note</strong>: <p class="para"> Support for initializing constants with Heredoc and Nowdoc syntax was added in PHP 5.3.0. </p> </p></blockquote> <p class="para"> The special <strong><code>::class</code></strong> constant is available as of PHP 5.5.0, and allows for fully qualified class name resolution at compile time, this is useful for namespaced classes: </p> <div class="example" id="example-184"> <p><strong>Example #3 Namespaced ::class example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">namespace </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br /> class </span><span style="color: #0000BB">bar </span><span style="color: #007700">{<br /> }<br /><br /> echo </span><span style="color: #0000BB">bar</span><span style="color: #007700">::class; </span><span style="color: #FF8000">// foo\bar<br /></span><span style="color: #007700">}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> </div> <div class="example" id="example-185"> <p><strong>Example #4 Constant expression example</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">const </span><span style="color: #0000BB">ONE </span><span style="color: #007700">= </span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /><br />class </span><span style="color: #0000BB">foo </span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// As of PHP 5.6.0<br /> </span><span style="color: #007700">const </span><span style="color: #0000BB">TWO </span><span style="color: #007700">= </span><span style="color: #0000BB">ONE </span><span style="color: #007700">* </span><span style="color: #0000BB">2</span><span style="color: #007700">;<br /> const </span><span style="color: #0000BB">THREE </span><span style="color: #007700">= </span><span style="color: #0000BB">ONE </span><span style="color: #007700">+ </span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">TWO</span><span style="color: #007700">;<br /> const </span><span style="color: #0000BB">SENTENCE </span><span style="color: #007700">= </span><span style="color: #DD0000">'The value of THREE is '</span><span style="color: #007700">.</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">THREE</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p> It is possible to provide a scalar expression involving numeric and string literals and/or constants in context of a class constant. </p></div> </div> <blockquote class="note"><p><strong class="note">Note</strong>: <p class="para"> Constant expression support was added in PHP 5.6.0. </p> </p></blockquote> <div class="example" id="language.oop5.basic.class.this"> <p><strong>Example #5 Class constant visibility modifiers</strong></p> <div class="example-contents"> <div class="phpcode"><code><span style="color: #000000"> <span style="color: #0000BB"><?php<br /></span><span style="color: #007700">class </span><span style="color: #0000BB">Foo </span><span style="color: #007700">{<br /> </span><span style="color: #FF8000">// As of PHP 7.1.0<br /> </span><span style="color: #007700">public const </span><span style="color: #0000BB">BAR </span><span style="color: #007700">= </span><span style="color: #DD0000">'bar'</span><span style="color: #007700">;<br /> private const </span><span style="color: #0000BB">BAZ </span><span style="color: #007700">= </span><span style="color: #DD0000">'baz'</span><span style="color: #007700">;<br />}<br />echo </span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">BAR</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br />echo </span><span style="color: #0000BB">Foo</span><span style="color: #007700">::</span><span style="color: #0000BB">BAZ</span><span style="color: #007700">, </span><span style="color: #0000BB">PHP_EOL</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?></span> </span> </code></div> </div> <div class="example-contents"><p>Output of the above example in PHP 7.1:</p></div> <div class="example-contents screen"> <div class="cdata"><pre> bar Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in … </pre></div> </div> </div> <blockquote class="note"><p><strong class="note">Note</strong>: <p class="para"> As of PHP 7.1.0 visibility modifiers are allowed for class constants. </p> </p></blockquote> </div><hr /><div class="manualnavbar" style="text-align: center;"> <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.properties.html">Properties</a></div> <div class="next" style="text-align: right; float: right;"><a href="language.oop5.autoload.html">Autoloading Classes</a></div> <div class="up"><a href="language.oop5.html">Classes and Objects</a></div> <div class="home"><a href="index.html">PHP Manual</a></div> </div></body></html>