rfc:objkey

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
rfc:objkey [2014/10/22 08:42]
stas
rfc:objkey [2017/09/22 13:28] (current)
Line 1: Line 1:
 ====== PHP RFC: Objects as hash keys ====== ====== PHP RFC: Objects as hash keys ======
-  * Version: 0.9 +  * Version: 1.0 
-  * Date: 2014-10-21 +  * Date: 2014-10-26 
-  * Author: Stas Malyshev (stas@php.net) +  * Author: Stas Malyshev (stas@php.net), krakjoe 
-  * Status: Draft +  * Status: Declined
   * First Published at: http://wiki.php.net/rfc/objkey   * First Published at: http://wiki.php.net/rfc/objkey
  
Line 26: Line 26:
 method implemented would produce an illegal offset type error when used in hash key position as before. method implemented would produce an illegal offset type error when used in hash key position as before.
  
-===== Backward Incompatible Changes =====+<code php> 
 +<?php 
 +class Foo { 
 +    public function __hash() { 
 +        return "Foo"; 
 +    } 
 +
 + 
 +$foo new Foo(); 
 +$test = [ 
 +    $foo => true 
 +]; 
 +</code> 
 + 
 +Inheritance shall work as any other magic method: 
 + 
 +<code php> 
 +<?php 
 +class Foo { 
 +    public function __hash() { 
 +        return "Foo"; 
 +    } 
 +
 + 
 +class Bar extends Foo { 
 +    /* shall use Foo::__hash unless Bar::__hash is implemented */ 
 +
 + 
 +$bar = new Bar(); 
 +$test = [ 
 +    $bar => true 
 +]; 
 +</code> 
 + 
 +Returning a non-scalar shall fail as it did before: 
 + 
 +<code php> 
 +<?php 
 +class Foo { 
 +    public function __hash() { 
 +        return []; 
 +    } 
 +
 + 
 +$foo = new Foo(); 
 +$test = [ 
 +    $foo => true 
 +]; 
 +</code> 
 + 
 +Shall yield: 
 + 
 +<code> 
 +Warning: Illegal offset type in %s on line %d 
 +</code> 
 + 
 +The current behavior of %%__toString%% is unchanged. 
 + 
 +==== Backward Incompatible Changes =====
  
 Should not break anything as we don't allow this now. Should not break anything as we don't allow this now.
Line 46: Line 104:
 Since objects are run-time, should not have any effects on opcache. Since objects are run-time, should not have any effects on opcache.
  
-==== New Constants ==== 
- 
-None. 
- 
-==== php.ini Defaults ==== 
- 
-None. 
  
 ===== Open Issues ===== ===== Open Issues =====
  
-Should this be supported for stringsI don't think it makes much sense but mentioning it here for completeness sake.+  - Should SplFixedArray support object indexes? 
 +  - Should SplObjectStorage support calling %%__hash%% for an object if it exists? 
  
  
-===== Proposed Voting Choices =====+===== Vote =====
  
-New magic method requires 2/3 majority.+New magic method requires 2/3 majority. The vote also includes choice for the name - %%__hash%% or %%__toKey%%. Vote for either is counted as the vote for the proposal
  
-===== Patches and Tests =====+<doodle title="Should we support using objects as keys as described in this proposal?" auth="stas" voteType="single" closed="true"> 
 +   * Yes, via method __hash 
 +   * Yes, via method __toKey 
 +   * No 
 +</doodle>
  
-TBD+The vote runs from December 16, 2014 to the end of day (PDT) January 6, 2015. 
  
 ===== Implementation ===== ===== Implementation =====
  
-TBD+https://github.com/php/php-src/pull/881
  
 ===== References ===== ===== References =====
Line 77: Line 133:
 ===== Rejected Features ===== ===== Rejected Features =====
  
-Using %%_toString%% for the key conversion, for the resons discussed above. + Using %%__toString%%  for the key conversion, for the reasons discussed above.  
 + - Supporting the use of objects for string indexes
rfc/objkey.1413967373.txt.gz · Last modified: 2017/09/22 13:28 (external edit)