ID:               12560
 Comment by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Closed
 Bug Type:         Class/Object related
 Operating System: Solaris 2.7
 PHP Version:      4.0.6
 New Comment:

Addition: the bug indeed does exist in standalone PHP 4.0.6 on Linux,
and not on standalone PHP 4.1.1 on Linux.

(I earlier encountered the bug in a complex set of code I was using,
but couldn't replicate it with extracting simpler code. Until I of
course just copied the above: it did immediately give me a
segementation fault on 4.0.6)


Previous Comments:
------------------------------------------------------------------------

[2002-10-16 07:25:47] [EMAIL PROTECTED]

I also encountered this bug using PHP 4.0.6 on Linux. I was not able to
replicate it using simpler code, then the complex code I was using now.
It should be noted that I am using standalone PHP.

I tried to replicate the bug on PHP 4.1.0 buy my complex code failed
there for other reasons; I will post an update if I can replicate it
there or using a short code fragment.

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

[2001-10-21 20:03:59] [EMAIL PROTECTED]

Works for me just fine with PHP 4.1.0RC1


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

[2001-08-03 13:51:21] [EMAIL PROTECTED]

This bug occurred with Solaris 2.7 and a regular build of php as a
standalone app. I haven't tested on Linux yet.

If the base class of a few levels of inheritance is in an included or
required file, then 'parent' may be incorrectly setup. Calls via
'parent' will actually call $this, and then give incorrect and most
likely disastrous behaviour.

The following example will quickly crash due to stack overflow from
infinite recursion, whereas inlining the base class 'X' rather than
including it will work as expected.

Incidentally, instantiating a B rather than a C will work correctly in
both cases.

File X.php:

<?php

class X
{
      function X() { }
}

?>

File crashme.php:

<?php

// Commenting out include and uncommenting class X
// below will work, whilst including X will crash

include_once 'X.php';


/*
class X
{
      function X() { }
}
*/

class A extends X
{
      function A() { $this->X(); }

      function crash_me() { }
}

class B extends A
{
      function B() { $this->A(); }
  
      function crash_me() { parent::crash_me(); }
}

class C extends B
{
      function C() { $this->B(); }
}

$r = new C();
$r->crash_me();

?>




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


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

Reply via email to