php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #52300 spl_get_object_by_hash()
Submitted: 2010-07-09 07:41 UTC Modified: 2010-08-07 01:53 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:0 (0.0%)
From: olamedia at gmail dot com Assigned:
Status: Wont fix Package: SPL related
PHP Version: 5.3.3RC2 OS:
Private report: No CVE-ID: None
View Add Comment Developer Edit
Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know!
Just going to say 'Me too!'? Don't clutter the database with that please — but make sure to vote on the bug!
Your email address:
MUST BE VALID
Solve the problem:
12 - 3 = ?
Subscribe to this entry?

 
 [2010-07-09 07:41 UTC] olamedia at gmail dot com
Description:
------------
class a{}
$object = new a();
$object2 = spl_get_object_by_hash(spl_object_hash($object));
var_dump($object === $object2); // true (same object)

NOTE: When using spl_get_object_by_hash, you must know that $object must be alive 
else function can return another object.

Primary usage example in test script:

Test script:
---------------
class a{
  protected $_b;
  public function getB(){
     return spl_get_object_by_hash($this->_b);
  }
  public function doSomething(){
    $b = $this->getB();
    // here I can use $b !
  }
  public function __construct($b){
     $this->_b = spl_object_hash($b);
  }
}
class b{
  protected $_a;
  public function getA(){
     return $this->_a;
  }
  public function __construct(){
     $this->_a = new a($this);
  }
  public function __destruct(){
    echo 'destroyed';
  }
}
$b = new b();
$b->getA()->doSomething();
unset($b); // destroyed  !! this IS NOT POSSIBLE without spl_get_object_by_hash()


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-11 12:26 UTC] cataphract@php.net
If you want weak references, this seems like a poor substitute. Who would want to store a reference that may yield another object in the future?
 [2010-07-11 13:24 UTC] olamedia at gmail dot com
Of course, the real problem is in garbage collector, which can't handle 
crossreferences. This function is quicker to-do alternative.
 [2010-08-07 01:53 UTC] johannes@php.net
-Status: Open +Status: Wont fix
 [2010-08-07 01:53 UTC] johannes@php.net
There's no good way to implement this.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Mar 28 14:01:29 2024 UTC