rfc:class_const_visibility

Differences

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

Link to this comparison view

rfc:class_const_visibility [2015/12/08 16:01]
sean-der Merged into 7.1
rfc:class_const_visibility [2017/09/22 13:28]
Line 1: Line 1:
-====== PHP RFC: Support Class Constant Visibility ====== 
-  * Version: 0.2 
-  * Date: 2015-09-13 
-  * Author: Sean DuBois <​sean@siobud.com>,​ Reeze Xia <​reeze@php.net>​ 
-  * Status: Accepted 
-  * First Published at: http://​wiki.php.net/​rfc/​class_const_visibility 
  
- 
-===== Introduction ===== 
- 
-Classes in PHP allow modifiers on properties and methods, but not constants. 
-It is an easily fixed inconsistency,​ and a feature that many want and most surprised 
-that it doesn'​t already exist. ​ [[http://​stackoverflow.com/​questions/​5339456/​php-class-constant-visibility|Stack Overflow Thread]] 
- 
-In a thread on php-internals a couple real world examples were offered. 
-    * Defining bitmasks/​magic numbers, but not exposing them globally. Before constants would be exposed allowing callers to depend on them. 
-    * Help make it more clear what is important, exposing harmless constants clutters documentation ​ needlessly. ​ 
- 
-===== Proposal ===== 
- 
-This RFC propose PHP support class constant visibility that mirror the behavior of method 
-and property visibility. ​ 
- 
-Class constant may be define as public, private or protected. class constants declared 
-without any explicit visibility keyword are defined as public. ​ 
- 
-Proposed syntax: 
- 
-<code php> 
-<?php 
- 
-class Token { 
- // Constants default to public 
- const PUBLIC_CONST = 0; 
- 
-        // Constants then also can have a defined visibility 
-        private const PRIVATE_CONST = 0; 
-        protected const PROTECTED_CONST = 0; 
-        public const PUBLIC_CONST_TWO = 0; 
-        ​ 
-        //Constants can only have one visibility declaration list 
-        private const FOO = 1, BAR = 2; 
-} 
- 
- 
-//​Interfaces only support public consts, and a compile time error will be thrown for anything else. Mirroring the behavior of methods. 
-interface ICache { 
-        public const PUBLIC = 0; 
-        const IMPLICIT_PUBLIC = 1; 
-} 
- 
-//​Reflection was enhanced to allow fetching more than just the values of constants 
-class testClass ​ { 
-  const TEST_CONST = '​test';​ 
-} 
- 
-$obj = new ReflectionClass( "​testClass"​ ); 
-$const = $obj->​getReflectionConstant( "​TEST_CONST"​ ); 
-$consts = $obj->​getReflectionConstants();​ 
- 
-</​code>​ 
- 
- 
-===== Backward Incompatible Changes ===== 
- 
-===== Proposed PHP Version(s) ===== 
- 
-This RFC targets PHP 7.1 
- 
-===== RFC Impact ===== 
- 
-==== To SAPIs ==== 
- 
-None. 
- 
-==== To Existing Extensions ==== 
- 
-None, all the class constant APIs will be the same. 
-There will be new _ex APIs that allow callers to explicitly pass flags. 
- 
-If a extension accesses non-public structures (the now non-existent class_constants HashTable) there will be breakage 
- 
-==== To Opcache ==== 
- 
-Need update. 
- 
-===== Vote ===== 
- 
-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 ===== 
- 
-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 ===== 
-  * http://​php.net/​manual/​en/​language.oop5.constants.php 
-  * http://​php.net/​manual/​en/​language.oop5.visibility.php 
- 
-===== Changelog ===== 
- 
-  * V0.1 Initial version 
-  * V0.2 Adopted by Sean DuBois <​sean@siobud.com>​ 
rfc/class_const_visibility.txt · Last modified: 2017/09/22 13:28 (external edit)