Bug #73647 [Com]: stdClass is not inherited if the class definition doesn't explicit it.
| From: | klaussantana at gmail dot com | Date: | Sat, 03 Dec 2016 21:14:52 +0000 |
| Subject: | Bug #73647 [Com]: stdClass is not inherited if the class definition doesn't explicit it. | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-205749@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=73647&edit=1
ID: 73647
Comment by: klaussantana at gmail dot com
Reported by: klaussantana at gmail dot com
Summary: stdClass is not inherited if the class definition
doesn't explicit it.
Status: Open
Type: Bug
Package: Scripting Engine problem
Operating System: any
PHP Version: 7.0.13
Block user comment: N
Private report: N
New Comment:
This causes a serious problem when you try something like this:
<?PHP class Insecure {}
(
function ( stdClass $Object = null )
{
# Some stuff only for
stdClass inheritants...
return $Object;
}
) ( new Insecure );
Previous Comments:
------------------------------------------------------------------------
[2016-12-03 21:04:54] klaussantana at gmail dot com
Description:
------------
For some reason, if you not explicit extends a class from stdClass it will not pass the
instanceof test.
Test script:
---------------
<?PHP
/****
* stdClass Inheritance Failure
* ================================================================================
*
* This example shows how stdClass is not inherited in classes definitions that
* do not explicit it.
*
*/
class InstableDefinition {}
class StableDefinition extends stdClass {}
class AnotherInstableDefinition extends InstableDefinition {}
class AnotherStableDefinition extends StableDefinition {}
$Objects =
[
'Instable Object' => new InstableDefinition,
'Stable Object' => new StableDefinition,
'Another Instable Object' => new AnotherInstableDefinition,
'Another Stable Object' => new AnotherStableDefinition,
];
foreach ( $Objects as $Object )
{
$ObjectClass = get_class($Object);
$ObjectStandard = $Object instanceof stdClass;
$ObjectEvaluates = $ObjectStandard ? 'does' : "doesn't";
echo "The {$ObjectClass} class objects {$ObjectEvaluates} instance from
stdClass." .PHP_EOL;
}
echo 'All these tests ran under PHP version ' .PHP_VERSION .'.' .PHP_EOL;
Expected result:
----------------
The InstableDefinition class objects does instance from stdClass.
The StableDefinition class objects does instance from stdClass.
The AnotherInstableDefinition class objects does instance from stdClass.
The AnotherStableDefinition class objects does instance from stdClass.
All these tests ran under PHP version 7.0.13.
Actual result:
--------------
The InstableDefinition class objects doesn't instance from stdClass.
The StableDefinition class objects does instance from stdClass.
The AnotherInstableDefinition class objects doesn't instance from
stdClass.
The AnotherStableDefinition class objects does instance from stdClass.
All these tests ran under PHP version 7.0.13.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=73647&edit=1