Edit report at https://bugs.php.net/bug.php?id=26586&edit=1

 ID:                 26586
 Updated by:         yohg...@php.net
 Reported by:        marc dot daumas at urssaf dot fr
 Summary:            cross referenced objects
-Status:             Open
+Status:             Closed
 Type:               Feature/Change Request
-Package:            Feature/Change Request
+Package:            *General Issues
 Operating System:   WinXP
 PHP Version:        Irrelevant
-Assigned To:        
+Assigned To:        yohgaki
 Block user comment: N
 Private report:     N

 New Comment:

It seems working now.


Previous Comments:
------------------------------------------------------------------------
[2012-10-27 23:52:40] will dot skates at ntlworld dot com

Please Close

------------------------------------------------------------------------
[2003-12-10 11:45:20] marc dot daumas at urssaf dot fr

Description:
------------
It becomes impossible to compare objects as soon as they have cross references.
if an object A reference an object B that reference A it becomes impossible to 
compare objects with == or === operators.
I understood your "reference" system and actualy I know that's not really a bug 
but an issue, but at least the === operator must deal with "already seen" 
objects.
I just wonder if PHP5 will become a near to real object language or if that 
behavior will persist.
Follow a basic example of Parent/Child object structure that can't be 
implemented in PHP4.
I think that if it's impossible to work properly with instances, PHP5 will not 
ritch the rank of an OOP language despite all that is said about it.
Best regards

-Marc

Reproduce code:
---------------
<?PHP
Class ParentObject {
        
        var $name;
        var $chidren;
        
        Function &ParentObject($name){
                $this->name=$name;
                $this->children=array();
        }
        
        Function addChild(&$child){
                if(!isset($this->children[$child->name])){
                        $this->children[$child->name]=&$child;
                        $child->setParent($this);
                }
        }
}
Class ChildObject {
        
        var $name;
        var $parent;
        
        Function &ChildObject($name){
                $this->name=$name;
                $this->parent=null;
        }
        
        Function setParent(&$parent){
                if($this->parent!==$parent){
                        if($this->parent!=null){
                                $this->parent->removeChild($this);
                        }
                        $this->parent=&$parent;
                        if($parent!=null){
                                $parent->addChild($this);
                        }
                }
        }
}
$p=&new ParentObject("parent");
$c=&new ChildObject("child");
$c->setParent($p);
?>

Expected result:
----------------
something other than 
<b>Fatal error</b>:  Nesting level too deep - recursive dependency? in 
<b>C:\Program Files\Apache Group\Apache2\htdocs\ngn2\test.php</b> on line 
<b>29</b><br />


Actual result:
--------------
<b>Fatal error</b>:  Nesting level too deep - recursive dependency? in 
<b>C:\Program Files\Apache Group\Apache2\htdocs\ngn2\test.php</b> on line 
<b>29</b><br />



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=26586&edit=1

Reply via email to