Are private constants possible in PHP? [duplicate]
Solution 1:
Folks! PHP 7.1.0 has been released
Now it's possible to have visibility modifiers with class constants.
<?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;
?>
Output of the above example in PHP 7.1:
bar
Fatal error: Uncaught Error: Cannot access private const Foo::BAZ in …
Solution 2:
The answer is a simple "no". PHP doesn't support this concept. The best you can do is a private static
variable in the class, which isn't as good of course because it's not readonly. But you just have to work around it.
Edit
Your question got me thinking - here's something I've never tried, but might work. Put another way "this is untested". But say you wanted a "private constant" called FOO
:
// "Constant" definitions
private function __get($constName){
// Null for non-defined "constants"
$val = null;
switch($constName){
case 'FOO':
$val = 'MY CONSTANT UNCHANGEABLE VALUE';
break;
case 'BAR':
$val = 'MY OTHER CONSTANT VALUE';
break;
}
return $val;
}
Of course your syntax would look a bit odd:
// Retrieve the "constant"
$foo = $this->FOO;
...but at least this wouldn't work:
$this->FOO = 'illegal!';
Maybe something worth trying?
Cheers