php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #36487 object === same object mismatch
Submitted: 2006-02-22 14:33 UTC Modified: 2009-01-06 21:03 UTC
From: xxoes at nw7 dot de Assigned:
Status: Not a bug Package: PHP-GTK related
PHP Version: 5.1.2 OS: *
Private report: No CVE-ID: None
 [2006-02-22 14:33 UTC] xxoes at nw7 dot de
Description:
------------
Although the objects have the same object id after destruction, "===" doesn't equal them any more.

I try:
   $abc = new abc();
   $obj = new bla();
and:
   $abc = new abc();
   $obj = new bla();

both the same result.

This does not happen when you remove "extends GtkObject" from the class signature.

Reproduce code:
---------------
<?PHP
   class bla extends GtkObject {
      public $xparent;

      function __construct() {
      }

      function __destruct() {
         echo "bla::__destruct()\r\n";
         $this->xparent->remove($this);
      }
   }

   class abc {
      function __destruct() {
         echo "abc::__destruct()\r\n";
      }

      function put($obj) {
         $this->obj = $obj;
         $obj->xparent = $this;
      }

      function remove($obj) {
         echo "Object matched?: ".($this->obj === $obj)."\r\n";
         echo $this->obj." ".$obj."\r\n";
      }
   }

   $abc = new abc();
   $obj = new bla();
   $abc->put($obj);
?>

Expected result:
----------------
That the operation $this->obj === $obj is true.

Actual result:
--------------
$this->obj and $obj mismatch.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-02-22 15:04 UTC] xxoes at nw7 dot de
This is not PHP-GTK related.
If you replace GtkObject with DOMElement you get the same result.
 [2006-02-22 16:42 UTC] iliaa@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

For === to return true on object comparison both objects must be instances of the same class and refer to the exact same internal object.
 [2006-02-23 08:05 UTC] xxoes at nw7 dot de
Sorry but i don't understand!

Thats are the same objects and the same instances, and === doesn't matched!

It works fine if a call $obj->__destruct === is true, but not if this function is called by php on exit.
 [2006-02-23 10:16 UTC] cweiske@php.net
As far as I see that, the objects *are* identical.
They equal === as long as they are not in the process of being destroyed - but as soon as the destroying process is begun, they don't equal any more although they are still equal
 [2006-03-28 12:55 UTC] mike@php.net
So this is GTK related then, isn't it?
 [2006-03-28 14:14 UTC] xxoes at nw7 dot de
No isn't php-gtk related. Is a general problem because DOMElement and GtkObject have the same result.
 [2009-01-06 21:03 UTC] auroraeosrose@php.net
The order that objects are destroyed in cannot be guaranteed, so it's generally a good idea not to be trying to fiddle with objects (even objects stored inside other objects) in destructors
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Tue Dec 10 18:01:28 2024 UTC