SplObjectStorage::getHash

(PHP 5 >= 5.4.0, PHP 7, PHP 8)

SplObjectStorage::getHash — 中ãĢåĢむã‚Ēブジェクトぎ一意ãĒ識åˆĨå­ã‚’įŽ—å‡ēする

čĒŦ明

public function SplObjectStorage::getHash(object $object): string

ã“ãŽãƒĄã‚Ŋッドは、SplObjectStorage ã‚ĒブジェクトãĢčŋŊ加されたã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŽč­˜åˆĨå­ã‚’įŽ—å‡ēしぞす。

SplObjectStorage ãŽåŽŸčŖ…ã§ã¯ã€ spl_object_hash() と同じ値をčŋ”しぞす。

゚トãƒŦãƒŧジã‚ĒブジェクトãĢã¯ã€åŒã˜č­˜åˆĨ子ぎã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’č¤‡æ•°æ ŧį´ã™ã‚‹ã“ã¨ã¯ã§ããžã›ã‚“ã€‚ ãã‚Œã‚’åˆŠį”¨ã—ãĻ、ã‚ģット (一意ãĒå€¤ãŽã‚ŗãƒŦã‚¯ã‚ˇãƒ§ãƒŗ) ã‚’åŽŸčŖ…ã™ã‚‹ãŽãĢもäŊŋえぞす。 ã‚Ēブジェクトが一意であるという性čŗĒは、こぎé–ĸ数ぎčŋ”ã™å€¤ãŒä¸€æ„ã§ã‚ã‚‹ã¨ã„ã†ã“ã¨ã§åŽŸįžã§ããžã™ã€‚

ãƒ‘ãƒŠãƒĄãƒŧã‚ŋ

object

識åˆĨå­ã‚’įŽ—å‡ēしたいã‚Ēブジェクト。

æˆģり値

įŽ—å‡ēã—ãŸč­˜åˆĨ子を文字列でčŋ”しぞす。

エナãƒŧ / 䞋外

čŋ”された値が文字列でãĒい場合ãĢ RuntimeException を゚ロãƒŧしぞす。

例

例1 SplObjectStorage::getHash() ぎ䞋

<?php
class OneSpecimenPerClassStorage extends SplObjectStorage {
public function
getHash($o) {
return
get_class($o);
}
}
class
A {}

$s = new OneSpecimenPerClassStorage;
$o1 = new stdClass;
$o2 = new stdClass;
$o3 = new A;

$s[$o1] = 1;
// $o2 は $o1 ãĢį­‰ã—ã„ã¨ãŋãĒされ、値がįŊŽãæ›ãˆã‚‰ã‚Œãžã™
$s[$o2] = 2;
$s[$o3] = 3;

// これらは先ãģおぎã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã¨į­‰ã—ã„ã¨ãŋãĒされ、
// さきãģおæ ŧį´ã—ãŸå€¤ãĢã‚ĸクã‚ģ゚できるようãĢãĒりぞす
$p1 = new stdClass;
$p2 = new A;
echo
$s[$p1], "\n";
echo
$s[$p2], "\n";
?>

上ぎ䞋ぎå‡ē力は、 たとえばäģĨ下ぎようãĢãĒりぞす。

2
3

å‚č€ƒ

  • spl_object_hash() - 指厚したã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŽãƒãƒƒã‚ˇãƒĨ ID をčŋ”す
īŧ‹add a note

User Contributed Notes 1 note

up
7
aron dot duby at gmail dot com Âļ
13 years ago
This also appears to be the function which gets used within the contains() function, so if all the objects you are storing already have a unique id you can overwrite this function with your own class.

<?php
class UserStorage extends SPLObjectStorage{
     public function getHash($obj){
          return $obj->id;
     }
}

$us = new UserStorage();
$user1 = new User(1);
$user2 = new User(2);

$us->attach($user1);
$us->attach($user2);

$me = new User(2);

// the following would normally fail since they are two separate objects 
// but it works now with our extended getHash()
$us->contains($me);

?>