rfc:objkey

This is an old revision of the document!


PHP RFC: Objects as hash keys

The purpose of this RFC is to introduce a magic method that will allow objects to serve as hash keys.

Introduction

In PHP array keys can be only represented as numbers and strings. However, there already are several classes that represent different kinds of numbers (such as GMP objects) and some objects can also represent strings (e.g. Unicode strings) or string-like objects. It would be convenient to be able to use such objects as array keys to.

It could be achieved as conversion to string, but this is not ideal since object's string representation does not always match object's identity and there may be case where human-readable string may be different from value for the purposes of hashing.

Proposal

Create a new magic method, hash() which is called when object is supplied as a hash key, and returns string or integer that is used as the hash key. A number of languages implement the same facility, namely: * Java has hashCode() and toString() * Python has str, repr and hash__

  • Ruby has object.hash

Backward Incompatible Changes

Should not break anything as we don't allow this now.

Proposed PHP Version(s)

Targeted for PHP 7

RFC Impact

To SAPIs

No impact on SAPIs

To Existing Extensions

If somebody implements something like ArrayAccess they may want to update it to accommodate objects.

To Opcache

Since objects are run-time, should not have any effects on opcache.

New Constants

None.

php.ini Defaults

None.

Open Issues

???

Proposed Voting Choices

New magic method requires 2/3 majority.

Patches and Tests

TBD

Implementation

TBD

References

Rejected Features

None

rfc/objkey.1413940291.txt.gz · Last modified: 2017/09/22 13:28 (external edit)