rfc:unset_bool
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
rfc:unset_bool [2013/03/06 21:04] – created bwoebi | rfc:unset_bool [2018/06/18 10:14] (current) – This RFC appears to be inactive cmb | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: unset(): return bool if the variable has existed ====== | ====== PHP RFC: unset(): return bool if the variable has existed ====== | ||
- | * Version: 0.5 | + | * Version: 0.61 |
* Date: 2013-03-06 | * Date: 2013-03-06 | ||
* Author: Bob Weinand, bobwei9@hotmail.com | * Author: Bob Weinand, bobwei9@hotmail.com | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
* Implementation: | * Implementation: | ||
Line 11: | Line 11: | ||
The purpose of this RFC is to make unset return something meaningful. People also shouldn' | The purpose of this RFC is to make unset return something meaningful. People also shouldn' | ||
- | This removes also an inconsistency: | + | This removes also an inconsistency: |
===== Proposal ===== | ===== Proposal ===== | ||
Line 17: | Line 17: | ||
Change unset()' | Change unset()' | ||
* return true if deletion was successful | * return true if deletion was successful | ||
- | * return false if deletion failed | + | * return false if deletion failed |
The feature could be useful in if's like: | The feature could be useful in if's like: | ||
Line 47: | Line 47: | ||
var_dump(unset($var)); | var_dump(unset($var)); | ||
var_dump(unset($var)); | var_dump(unset($var)); | ||
+ | |||
+ | $var = 1; | ||
+ | var_dump(unset($var, | ||
$dim[1] = " | $dim[1] = " | ||
Line 72: | Line 75: | ||
var_dump(unset($class-> | var_dump(unset($class-> | ||
</ | </ | ||
+ | |||
+ | ===== Use case ===== | ||
+ | <code php> | ||
+ | class User { | ||
+ | private $data = []; | ||
+ | |||
+ | // here a __set and a __get function for $data | ||
+ | |||
+ | public function __unset ($key) { | ||
+ | switch ($key) { | ||
+ | case " | ||
+ | return false; | ||
+ | default: | ||
+ | return unset($this-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | class UserManager { | ||
+ | private $Users = []; | ||
+ | |||
+ | public function __construct($data) { | ||
+ | // some code to initialize the $this-> | ||
+ | } | ||
+ | |||
+ | public function reset($userId, | ||
+ | if (!unset($this-> | ||
+ | throw new Exception(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $manager = new UserManager($data); | ||
+ | |||
+ | $manager-> | ||
+ | </ | ||
+ | |||
+ | This genre of code could be also in Frameworks to indicate to a coder that the variable can be accessed, but not deleted. | ||
===== Implementation Details === | ===== Implementation Details === | ||
Line 90: | Line 130: | ||
Should be implemented in the next 5.x (e.g. 5.5 if it's delayed due to ZO+ or 5.6). | Should be implemented in the next 5.x (e.g. 5.5 if it's delayed due to ZO+ or 5.6). | ||
+ | |||
+ | ===== Microbenchmark ===== | ||
+ | |||
+ | < | ||
+ | time ./ | ||
+ | |||
+ | Unpatched: average of 5x executed: | ||
+ | real 0m4.935s | ||
+ | user 0m4.925s | ||
+ | sys 0m0.008s | ||
+ | |||
+ | Patched: average of 5x executed: | ||
+ | real 0m4.945s | ||
+ | user 0m4.938s | ||
+ | sys 0m0.005s | ||
+ | </ | ||
+ | This is an increase of 0.15%. This is 1 nanosecond per execution more than previously. | ||
===== References ===== | ===== References ===== | ||
Line 98: | Line 155: | ||
* Version 0.5: Initial RFC | * Version 0.5: Initial RFC | ||
+ | * Version 0.51: Added example for multiple unset()' | ||
+ | * Version 0.52: echo may be also considered as a function... | ||
+ | * Version 0.53: Added microbenchmark | ||
+ | * Version 0.6: Added example real world use case | ||
+ | * Version 0.61: Little clarification about failures |
rfc/unset_bool.1362603858.txt.gz · Last modified: 2017/09/22 13:28 (external edit)