rfc:restrict_globals_usage
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision |
rfc:restrict_globals_usage [2020/12/04 11:09] – nikic | rfc:restrict_globals_usage [2021/01/06 11:47] (current) – nikic |
---|
* Date: 2020-12-02 | * Date: 2020-12-02 |
* Author: Nikita Popov <nikic@php.net> | * Author: Nikita Popov <nikic@php.net> |
* Status: Under Discussion | * Status: Implemented |
* Target Version: PHP 8.1 | * Target Version: PHP 8.1 |
* Implementation: https://github.com/php/php-src/pull/6487 | * Implementation: https://github.com/php/php-src/pull/6487 |
</PHP> | </PHP> |
| |
The variable ''$a'' is stored inside a compiled-variable (CV) call frame slot on the virtual machine stack, which allows it to be accessed efficient. In order to allow modification of the variable through ''$GLOBALS'', the ''$GLOBALS'' array stores array elements of type ''INDIRECT'', which contain a pointer to the CV slot. | The variable ''$a'' is stored inside a compiled-variable (CV) call frame slot on the virtual machine stack, which allows it to be accessed efficiently. In order to allow modification of the variable through ''$GLOBALS'', the ''$GLOBALS'' array stores array elements of type ''INDIRECT'', which contain a pointer to the CV slot. |
| |
As such, array operations on ''$GLOBALS'' need to check whether the accessed element is ''INDIRECT'' and perform a de-indirection operation. However, as //any// array could potentially be the ''$GLOBALS'' array, this check has to be performed for essentially all array operations on all arrays. This imposes an implementation and performance cost to account for a rarely used edge-case. | As such, array operations on ''$GLOBALS'' need to check whether the accessed element is ''INDIRECT'' and perform a de-indirection operation. However, as //any// array could potentially be the ''$GLOBALS'' array, this check has to be performed for essentially all array operations on all arrays. This imposes an implementation and performance cost to account for a rarely used edge-case. |
===== Vote ===== | ===== Vote ===== |
| |
Yes/No. | Yes/No. Voting started 2020-12-23 and closes 2021-01-06. |
| |
| <doodle title="Restrict $GLOBALS usage as specified?" auth="nikic" voteType="single" closed="true"> |
| * Yes |
| * No |
| </doodle> |
| |
rfc/restrict_globals_usage.1607080143.txt.gz · Last modified: 2020/12/04 11:09 by nikic