The code below (which is based on Derick's code [1]) used to work until
 recently:

    <?php
    class ClassWithNonPublicProperties {
        protected $protectedProperty = 'foo';
        private $privateProperty = 'bar';
    }

    function getNonPublicProperty($object, $propertyName) {
        try {
            $class = new ReflectionClass($object);

            if ($class->hasProperty($propertyName)) {
                $property = $class->getProperty($propertyName);

                if (!$property->isPublic()) {
                    if ($property->isProtected()) {
                        $propertyName = "\0*\0" . $propertyName;
                    } else {
                        $propertyName = sprintf(
                          "\0%s\0%s",

                          get_class($object),
                          $propertyName
                        );
                    }

                    $tmp = (array) $object;

                    return $tmp[$propertyName];
                } else {
                    return $object->$propertyName;
                }
            } else {
                throw new InvalidArgumentException;
            }
        }

        catch (ReflectionException $e) {
            throw new InvalidArgumentException;
        }
    }

    $object = new ClassWithNonPublicProperties;

    print getNonPublicProperty($object, 'protectedProperty') . "\n";
    print getNonPublicProperty($object, 'privateProperty') . "\n";
    ?>

 The current PHP_5_1 prints

    Warning: ReflectionClass::getProperty():
    bad type specifier while parsing parameters in test.php on line 12

    Fatal error: Call to a member function isPublic() on a non-object
    in test.php on line 14

 Is this change in behaviour intentional or should I file a bug report
 for this?

 --
 [1] http://derickrethans.nl/private_properties_exposed.php

-- 
Sebastian Bergmann                      http://www.sebastian-bergmann.de/
GnuPG Key: 0xB85B5D69 / 27A7 2B14 09E4 98CD 6277 0E5B 6867 C514 B85B 5D69

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to