diff --git a/src/Monolog/Utils.php b/src/Monolog/Utils.php index b2d0ad58..2fd901ad 100644 --- a/src/Monolog/Utils.php +++ b/src/Monolog/Utils.php @@ -19,7 +19,15 @@ final class Utils { $class = \get_class($object); - return 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class; + if (false === ($pos = \strpos($class, "@anonymous\0"))) { + return $class; + } + + if (false === ($parent = \get_parent_class($class))) { + return \substr($class, 0, $pos + 10); + } + + return $parent . '@anonymous'; } public static function substr(string $string, int $start, ?int $length = null): string diff --git a/tests/Monolog/UtilsTest.php b/tests/Monolog/UtilsTest.php index 68a62b14..3d66b960 100644 --- a/tests/Monolog/UtilsTest.php +++ b/tests/Monolog/UtilsTest.php @@ -13,6 +13,25 @@ namespace Monolog; class UtilsTest extends \PHPUnit_Framework_TestCase { + /** + * @param string $expected + * @param object $object + * @dataProvider provideObjects + */ + public function testGetClass($expected, $object) + { + $this->assertSame($expected, Utils::getClass($object)); + } + + public function provideObjects() + { + return [ + ['stdClass', new \stdClass()], + ['class@anonymous', new class {}], + ['stdClass@anonymous', new class extends \stdClass {}], + ]; + } + /** * @param string $expected * @param string $input