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
Next revisionBoth sides next revision
rfc:class_const_visibility [2015/10/20 17:34] sean-derrfc:class_const_visibility [2015/12/08 16:01] – Merged into 7.1 sean-der
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: Under Discussion+  * Status: Accepted
   * First Published at: http://wiki.php.net/rfc/class_const_visibility   * First Published at: http://wiki.php.net/rfc/class_const_visibility
  
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. +without any explicit visibility keyword are defined as public. 
  
 Proposed syntax: Proposed syntax:
Line 38: Line 38:
         protected const PROTECTED_CONST = 0;         protected const PROTECTED_CONST = 0;
         public const PUBLIC_CONST_TWO = 0;         public const PUBLIC_CONST_TWO = 0;
 +        
 +        //Constants can only have one visibility declaration list
 +        private const FOO = 1, BAR = 2;
 } }
  
  
-//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); +
- public function set($k);+
 } }
  
-</code> +//Reflection was enhanced to allow fetching more than just the values of constants
- +
- +
-===== Backward Incompatible Changes ===== +
- +
-==== Reflection Ext ==== +
-The reflection extension has been updated to expose constants like [[ReflectionProperty|http://php.net/manual/en/class.reflectionproperty.php]].  +
- +
-Instead of getConstant/getConstants returning values there is now a dedicated ReflectionClassConstant class. +
- +
-<code php> +
-<?php +
 class testClass  { class testClass  {
   const TEST_CONST = 'test';   const TEST_CONST = 'test';
Line 68: Line 56:
  
 $obj = new ReflectionClass( "testClass" ); $obj = new ReflectionClass( "testClass" );
-$const = $obj->getConstant( "TEST_CONST" ); +$const = $obj->getReflectionConstant( "TEST_CONST" ); 
-$const->__toString(); +$consts = $obj->getReflectionConstants(); 
-$const->getName(); +
-$const->getValue(); +
-$const->isPublic(); +
-$const->isPrivate(); +
-$const->isProtected(); +
-$const->getModifiers(); +
-$const->getDeclaringClass();+
 </code> </code>
 +
 +
 +===== Backward Incompatible Changes =====
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
Line 94: 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 now non-existant 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 103: Line 88:
  
 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 This vote will close on 06:00 UTC on Tuesday 2015-10-27
  
-<doodle title="Class Constant Visibility" auth="sdubois" voteType="single" closed="false">+<doodle title="Class Constant Visibility" auth="sdubois" voteType="single" closed="true">
    * Yes    * Yes
    * No    * No
Line 114: Line 100:
 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 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 =====
rfc/class_const_visibility.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1