rfc:locked-classes
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
rfc:locked-classes [2019/03/10 18:04] – imsop | rfc:locked-classes [2019/03/11 11:03] – Fix formatting in reflection section nikic | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: Locked Classes ====== | ====== PHP RFC: Locked Classes ====== | ||
- | * Version: | + | * Version: 1.0 |
- | * Date: 2019-03-06 | + | * Date: 2019-03-10 |
* Author: Rowan Collins [IMSoP], rowan.collins@gmail.com | * Author: Rowan Collins [IMSoP], rowan.collins@gmail.com | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 10: | Line 10: | ||
Object properties in PHP are primarily defined in class definitions; | Object properties in PHP are primarily defined in class definitions; | ||
- | While setting properties which were not declared in a class definition, or unsetting properties which were declared, can be a useful tool, like many of PHP's dynamic features, it also makes certain mistakes easier. For instance, if a class defines a property '' | + | While setting properties which were not declared in a class definition, or unsetting properties which were declared, can be a useful tool, like many of PHP's dynamic features, it also makes certain mistakes easier. For instance, if a class defines a property '' |
Changing this behaviour for all objects would be a significant change to the language, with the potential to break a large amount of existing code. However, code written with no intention of using this dynamic behaviour would benefit from a way to switch it off. | Changing this behaviour for all objects would be a significant change to the language, with the potential to break a large amount of existing code. However, code written with no intention of using this dynamic behaviour would benefit from a way to switch it off. | ||
+ | |||
+ | While this can be achieved through strategic use of the '' | ||
===== Proposal ===== | ===== Proposal ===== | ||
Line 64: | Line 66: | ||
===== Naming ===== | ===== Naming ===== | ||
- | Newer versions of ECMAScript / JavaScript have [[https:// | + | Newer versions of ECMAScript / JavaScript have [[https:// |
Since the proposed modifier applies to a class, not an instance, it would be confusing to use the keyword " | Since the proposed modifier applies to a class, not an instance, it would be confusing to use the keyword " | ||
+ | |||
+ | The name " | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
- | No internal classes, or classes in unmodified | + | The keyword " |
+ | |||
+ | No existing | ||
Since it is a new keyword, it will not be possible to " | Since it is a new keyword, it will not be possible to " | ||
Line 79: | Line 85: | ||
==== To Opcache ==== | ==== To Opcache ==== | ||
+ | |||
To be determined: are there any optimisations which interact with the behaviours being changed? | To be determined: are there any optimisations which interact with the behaviours being changed? | ||
Line 85: | Line 92: | ||
The following additions will be made to expose the new flag via reflection: | The following additions will be made to expose the new flag via reflection: | ||
- | * New constant ReflectionClass:: | + | |
- | * The return value of ReflectionClass:: | + | * The return value of ReflectionClass:: |
- | * Reflection:: | + | * Reflection:: |
- | * A new ReflectionClass:: | + | * A new ReflectionClass:: |
===== Unaffected PHP Functionality ===== | ===== Unaffected PHP Functionality ===== | ||
+ | Calling '' | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
- | TODO | + | Classes defined by extensions could be marked " |
===== Proposed Voting Choices ===== | ===== Proposed Voting Choices ===== | ||
Line 100: | Line 107: | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
- | https:// | + | A pull request containing an initial implementation with basic tests is available on github: |
===== Implementation ===== | ===== Implementation ===== |
rfc/locked-classes.txt · Last modified: 2019/06/04 18:56 by imsop