rfc:class_const_visibility

This is an old revision of the document!


PHP RFC: Support Class Constant 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. Stack Overflow Thread

In a thread on php-internals a couple real world examples were offered.

  • Keeping constants in a parent class private like a Database Username/Password
  • Defining bitmasks/magic numbers, but not exposing them globally

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 explict visibility keyword are defined as public.

Proposed syntax:

<?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;
}
 
 
//Interfaces only support protected/public const, and a compile time error will be throw for privates
interface ICache {
        public const PUBLIC = 0;
	protected const PROTECTED = 0;
 
	public function get($k, $v);
	public function set($k);
}

Backward Incompatible Changes

Reflection Ext

The reflection extension will have to be updated to expose constants like properties. Instead of just an array of values there will be a dedicated ReflectionClassConstant class.

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 class_constants HashTable) there will be breakage

To Opcache

Need update.

Proposed Voting Choices

Simple Yes/No option. This requires a 2/3 majority.

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

References

Changelog

rfc/class_const_visibility.1443104407.txt.gz · Last modified: 2017/09/22 13:28 (external edit)