rfc:weak_maps
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:weak_maps [2019/11/04 18:46] – Add a use-case example nikic | rfc:weak_maps [2019/12/18 08:44] – -> voting nikic | ||
---|---|---|---|
Line 3: | Line 3: | ||
* Author: Nikita Popov < | * Author: Nikita Popov < | ||
* Proposed Version: PHP 8.0 | * Proposed Version: PHP 8.0 | ||
- | * Status: | + | * Status: |
* Implementation: | * Implementation: | ||
Line 83: | Line 83: | ||
===== Vote ===== | ===== Vote ===== | ||
- | Add WeakMap class in PHP 8.0? Yes/No. | + | Voting started 2019-12-18 and closes 2020-01-01. |
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
+ | ===== Differences to spl_object_id() and WeakReference ===== | ||
+ | |||
+ | Weak maps require first-class language support and cannot be implemented using existing functionality provided by PHP. | ||
+ | |||
+ | At first sight, it may seem that an array mapping from '' | ||
+ | |||
+ | * '' | ||
+ | * The object ID cannot be converted back into an object, so iteration over the map is not possible. | ||
+ | * The value stored under the ID will not be released when the object is destroyed. | ||
+ | |||
+ | Using the '' | ||
+ | |||
+ | <PHP> | ||
+ | // Insertion | ||
+ | $this-> | ||
+ | |||
+ | // Lookup | ||
+ | $id = spl_object_id($object); | ||
+ | if (isset($this-> | ||
+ | [$weakRef, $data] = $this-> | ||
+ | if ($weakRef-> | ||
+ | return $data; | ||
+ | } | ||
+ | // This entry belongs to a destroyed object. | ||
+ | unset($this-> | ||
+ | } | ||
+ | return null; | ||
+ | </ | ||
+ | |||
+ | This makes use of the '' | ||
+ | |||
+ | A native weak map implementation will instead remove the value from the weak map as soon as the object key is destroyed. |
rfc/weak_maps.txt · Last modified: 2020/01/03 09:56 by nikic