rfc:class_const_visibility

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:class_const_visibility [2015/09/13 05:45] – Formatting Fixes sean-derrfc:class_const_visibility [2016/02/20 02:26] reeze
Line 3: Line 3:
   * Date: 2015-09-13   * Date: 2015-09-13
   * Author: Sean DuBois <sean@siobud.com>, Reeze Xia <reeze@php.net>   * Author: Sean DuBois <sean@siobud.com>, Reeze Xia <reeze@php.net>
-  * Status: Draft+  * Status: Implemented
   * First Published at: http://wiki.php.net/rfc/class_const_visibility   * First Published at: http://wiki.php.net/rfc/class_const_visibility
  
Line 14: Line 14:
  
 In a thread on php-internals a couple real world examples were offered. In a thread on php-internals a couple real world examples were offered.
-    * Keeping constants in a parent class like a Database Username/Password +    * Defining bitmasks/magic numbers, but not exposing them globally. Before constants would be exposed allowing callers to depend on them. 
-    * Not allowing child classes to accidentally mutate a constant in a parent+    * Help make it more clear what is important, exposing harmless constants clutters documentation  needlessly
  
 ===== Proposal ===== ===== Proposal =====
Line 23: Line 23:
  
 Class constant may be define as public, private or protected. class constants declared Class constant may be define as public, private or protected. class constants declared
-without any explict visibility keyword are defined as public. Class constants may also +without any explicit visibility keyword are defined as public. 
-have the final flag, that prevents inherited constants value from being changed+
  
 Proposed syntax: Proposed syntax:
Line 36: Line 35:
  
         // Constants then also can have a defined visibility         // Constants then also can have a defined visibility
-        private PRIVATE_CONST = 0; +        private const PRIVATE_CONST = 0; 
-        protected PROTECTED_CONST = 0; +        protected const PROTECTED_CONST = 0; 
-        public PUBLIC_CONST_TWO = 0;+        public const PUBLIC_CONST_TWO = 0;
                  
-        // Constants may also have the final modifier, for constants that are inherited but may not be overridden -- TBD +        //Constants can only have one visibility declaration list 
-        final private FINAL_CONST 0; +        private const FOO 1, BAR 2;
-        final FINAL_IMPLICIT_PUBLIC_CONST 0;+
 } }
  
  
-//Interfaces only support protected/public const, and a compile time error will be throw for privates+//Interfaces only support public consts, and a compile time error will be thrown for anything else. Mirroring the behavior of methods.
 interface ICache { interface ICache {
         public const PUBLIC = 0;         public const PUBLIC = 0;
- protected const PROTECTED 0;+        const IMPLICIT_PUBLIC 1; 
 +}
  
- public function get($k, $v); +//Reflection was enhanced to allow fetching more than just the values of constants 
- public function set($k);+class testClass 
 +  const TEST_CONST = 'test';
 } }
 +
 +$obj = new ReflectionClass( "testClass" );
 +$const = $obj->getReflectionConstant( "TEST_CONST" );
 +$consts = $obj->getReflectionConstants();
  
 </code> </code>
  
-==== Final Modifier ==== 
-This RFC currently includes the final modifier, but may be put to a separate vote if it raises concerns. 
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
- 
-No BC break. 
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
Line 79: Line 79:
 There will be new _ex APIs that allow callers to explicitly pass flags. There will be new _ex APIs that allow callers to explicitly pass flags.
  
-If a extension accesses non-public structures (the class_constants HashTable) there will be breakage+If a extension accesses non-public structures (the now non-existent class_constants HashTable) there will be breakage
  
 ==== To Opcache ==== ==== To Opcache ====
Line 85: Line 85:
 Need update. Need update.
  
-===== Proposed Voting Choices =====+===== Vote =====
  
 Simple Yes/No option. This requires a 2/3  majority. Simple Yes/No option. This requires a 2/3  majority.
 +
 +This vote will close on 06:00 UTC on Tuesday 2015-10-27
 +
 +<doodle title="Class Constant Visibility" auth="sdubois" voteType="single" closed="true">
 +   * Yes
 +   * No
 +</doodle>
  
 ===== Patches and Tests ===== ===== Patches and Tests =====
  
-A pull request has been made, but not complete. It needs review, and help with opcache changes : https://github.com/php/php-src/pull/1494+A pull request has been made. It is feature complete but needs review, more tests, and help with opcache changes : https://github.com/php/php-src/pull/1494
  
 +This feature was merged into PHP master here: https://github.com/php/php-src/commit/a75c195000b3226904103244fa9c3d0ce1111838
  
 ===== References ===== ===== References =====
Line 102: Line 110:
   * V0.1 Initial version   * V0.1 Initial version
   * V0.2 Adopted by Sean DuBois <sean@siobud.com>   * V0.2 Adopted by Sean DuBois <sean@siobud.com>
 +  * V0.2 Implemented
rfc/class_const_visibility.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1