rfc:hashkey

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
rfc:hashkey [2014/10/22 12:55] krakjoerfc:hashkey [2014/10/22 17:57] krakjoe
Line 1: Line 1:
-====== PHP RFC: __hashKey magic method ======+====== PHP RFC: __toKey magic method ======
   * Version: 0.9   * Version: 0.9
   * Date: 2014-10-22   * Date: 2014-10-22
Line 5: Line 5:
   * Status: Draft   * Status: Draft
   * First Published at: http://wiki.php.net/rfc/hashkey   * First Published at: http://wiki.php.net/rfc/hashkey
- 
-===== Introduction ===== 
-Often discussed is the problem that we cannot use objects as array keys. 
  
 ===== Proposal ===== ===== Proposal =====
-A new magic __hashKey method, expected to return a scalar suitable for use as an HashTable key.+A new magic toKey method, to resolve the problem of not being able to use Objects as array keys. 
 + 
 +<code php> 
 +<?php 
 +class Foo { 
 +    public function __toKey() { 
 +        return "Foo"; 
 +    } 
 +
 + 
 +$foo = new Foo(); 
 +$test = [ 
 +    $foo => true 
 +]; 
 +</code> 
 + 
 +Inheritance shall work as any other magic method: 
 + 
 +<code php> 
 +<?php 
 +class Foo { 
 +    public function __toKey() { 
 +        return "Foo"; 
 +    } 
 +
 + 
 +class Bar extends Foo { 
 +    /* shall use Foo::__toKey unless Bar::__toKey is implemented */ 
 +
 + 
 +$bar = new Bar(); 
 +$test = [ 
 +    $bar => true 
 +]; 
 +</code> 
 + 
 +Returning non-scalar shall fail as it did before: 
 + 
 +<code php> 
 +<?php 
 +class Foo { 
 +    public function __toKey() { 
 +        return []; 
 +    } 
 +
 + 
 +$foo = new Foo(); 
 +$test = [ 
 +    $foo => true 
 +]; 
 +</code> 
 + 
 +Shall yield: 
 + 
 +<code php> 
 +Warning: Illegal offset type in %s on line %d 
 +</code> 
 + 
 +The current behaviour of __toString is unchanged.
  
 ===== Proposed PHP Version(s) ===== ===== Proposed PHP Version(s) =====
rfc/hashkey.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1