Both sides previous revisionPrevious revisionNext revision | Previous revision |
rfc:token_as_object [2020/03/02 17:53] – nikic | rfc:token_as_object [2020/11/12 13:33] (current) – nikic |
---|
* Date: 2020-02-13 | * Date: 2020-02-13 |
* Author: Nikita Popov <nikic@php.net> | * Author: Nikita Popov <nikic@php.net> |
* Status: Under Discussion | * Status: Implemented |
* Target Version: PHP 8.0 | * Target Version: PHP 8.0 |
* Implementation: https://github.com/php/php-src/pull/5176 | * Implementation: https://github.com/php/php-src/pull/5176 |
| |
The ''token_get_all()'' function currently returns tokens either as a single-character string, or an array with a token ID, token text and line number. This RFC proposes to add a token_get_all() alternative which returns an array of objects instead. This reduces memory usage and makes code operating on tokens more readable. | The ''token_get_all()'' function currently returns tokens either as a single-character string, or an array with a token ID, token text and line number. This RFC proposes to add a token_get_all() alternative which returns an array of objects instead. This reduces memory usage and makes code operating on tokens more readable. |
| |
| > **Note:** PhpToken::getAll() has been renamed to PhpToken::tokenize() prior to the PHP 8.0 release. The RFC text still refers to PhpToken::getAll(). |
| |
===== Proposal ===== | ===== Proposal ===== |
The ''is()'' method allows checking for certain tokens, while abstracting over whether it is a single-char token ''%%$token->is(';')%%'', a multi-char token ''%%$token->is(T_FUNCTION)%%'', or whether multiple tokens are allowed ''%%$token->is([T_CLASS, T_TRAIT, T_INTERFACE])%%''. | The ''is()'' method allows checking for certain tokens, while abstracting over whether it is a single-char token ''%%$token->is(';')%%'', a multi-char token ''%%$token->is(T_FUNCTION)%%'', or whether multiple tokens are allowed ''%%$token->is([T_CLASS, T_TRAIT, T_INTERFACE])%%''. |
| |
While non-generic code can easily check the appropriate property, such as ''%%$token->text == ';'%%'' or ''%%$token->id == T_FUNCTION%%'', token stream implementations commonly need to be generic over different token kinds and need to support specification of multiple token kind. For example: | While non-generic code can easily check the appropriate property, such as ''%%$token->text == ';'%%'' or ''%%$token->id == T_FUNCTION%%'', token stream implementations commonly need to be generic over different token kinds and need to support specification of multiple token kinds. For example: |
| |
<PHP> | <PHP> |
| // An example, NOT part of the PhpToken interface. |
public function findRight($pos, $findTokenKind) { | public function findRight($pos, $findTokenKind) { |
$tokens = $this->tokens; | $tokens = $this->tokens; |
===== Vote ===== | ===== Vote ===== |
| |
Yes / No. | Voting opened 2020-03-06 and closes 2020-03-20. |
| |
| <doodle title="Add object-based token_get_all() alternative?" auth="nikic" voteType="single" closed="true"> |
| * Yes |
| * No |
| </doodle> |
| |