note 48224 deleted from language.oop5.constants by cmb

From: Date: Wed, 31 Aug 2016 17:15:17 +0000
Subject: note 48224 deleted from language.oop5.constants by cmb
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-206439@lists.php.net to get a copy of this message
Note Submitter: caliban at darklock dot com ---- Lest anyone think this is somehow an omission in PHP, there is simply no point to having a protected or private constant. Access specifiers identify who has the right to *change* members, not who has the right to read them: <?php // define a test class class Test { public static $open=2; protected static $var=1; private static $secret=3; } $classname="Test"; // reflect class information $x=new ReflectionClass($classname); $y=array(); foreach($x->GetStaticProperties() as $k=>$v) $y[str_replace(chr(0),"@",$k)]=$v; // define the variables to search for $a=array("open","var","secret","nothing"); foreach($a as $b) { if(isset($y["$b"])) echo "\"$b\" is public: {$y["$b"]}<br/>"; elseif(isset($y["@*@$b"])) echo "\"$b\" is protected: {$y["@*@$b"]}<br/>"; elseif(isset($y["@$classname@$b"])) echo "\"$b\" is private: {$y["@$classname@$b"]}<br/>"; else echo "\"$b\" is not a static member of $classname<br/>"; } ?> As you can see from the results of this code, the protected and private static members of Test are still visible if you know where to look. The protection and privacy are applicable only on writing, not reading -- and since nobody can write to a constant at all, assigning an access specifier to it is just redundant.

« previous php.notes (#206439) next »