Bug #53586 [Opn->Bgs]: parent::__construct destroys object if exception is thrown

From: Date: Tue, 21 Dec 2010 17:39:33 +0000
Subject: Bug #53586 [Opn->Bgs]: parent::__construct destroys object if exception is thrown
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-157182@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=53586&edit=1

 ID:                 53586
 Updated by:         cataphract@php.net
 Reported by:        peters at yandex dot ru
 Summary:            parent::__construct destroys object if exception is
                     thrown
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            PDO related
 Operating System:   Linux
 PHP Version:        5.3.4
 Block user comment: N
 Private report:     N

 New Comment:

This is a proper, safe way to handle the exception. The exception in a
constructor means the object is likely not in a valid state after it.
PHP itself doesn't require parent constructors to be called and, if
they're called and there's an exception, it allows catching the
exception. In my opinion this a bad choice, but for internal objects
it's much worse because the consequences of an internal object in an
invalid state are segfaults and other problems.

Closing as bogus.


Previous Comments:
------------------------------------------------------------------------
[2010-12-21 10:03:55] peters at yandex dot ru

Description:
------------
When calling parent::__construct() in any(!) method of PDO successor
class and exception is thrown in parent::__construct() successor object
is destroyed regardless of the fact that exception is properly caught.

Test script:
---------------
class B extends PDO
{
	public function __construct()
	{
		try
		{
			parent::__construct('');
		}
		catch (Exception $e)
		{
		}
		var_dump($this);
	}
}

new B('');

Expected result:
----------------
object(B)#45 (0) { } 

Actual result:
--------------
NULL


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



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


Thread (2 messages)

« previous php.bugs (#157182) next »