ConFoo Montreal 2017 Calling for Papers

ReflectionClass::getDefaultProperties

(PHP 5, PHP 7)

ReflectionClass::getDefaultPropertiesRécupère les propriétés par défaut

Description

public array ReflectionClass::getDefaultProperties ( void )

Récupère les propriétés par défaut d'une classe (incluant l'héritage).

Note:

Cette méthode ne fonctionne que pour les propriétés statiques lorsqu'utilisées sur des classes internes. La valeur par défaut d'une propriété de classe statique ne peut pas être surveillée lors de l'utilisation de cette méthode sur des classes définies par l'utilisateur.

Liste de paramètres

Cette fonction ne contient aucun paramètre.

Valeurs de retour

Un array des propriétés par défaut dont la clé est le nom de la propriété et la valeur est la valeur par défaut de la propriété ou NULL si elle n'en n'a pas. La fonction ne fait pas la distinction entre les propriétés statiques et non statiques et ne prend pas en compte la visibilité.

Exemples

Exemple #1 Exemple ReflectionClass::getDefaultProperties()

<?php
class Bar {
    protected 
$inheritedProperty 'inheritedDefault';
}

class 
Foo extends Bar {
    public 
$property 'propertyDefault';
    private 
$privateProperty 'privatePropertyDefault';
    public static 
$staticProperty 'staticProperty';
    public 
$defaultlessProperty;
}

$reflectionClass = new ReflectionClass('Foo');
var_dump($reflectionClass->getDefaultProperties());
?>

L'exemple ci-dessus va afficher :

array(5) {
   ["staticProperty"]=>
   string(14) "staticProperty"
   ["property"]=>
   string(15) "propertyDefault"
   ["privateProperty"]=>
   string(22) "privatePropertyDefault"
   ["defaultlessProperty"]=>
   NULL
   ["inheritedProperty"]=>
   string(16) "inheritedDefault"
}

Voir aussi

add a note add a note

User Contributed Notes 3 notes

up
2
runaurufu AT gmail.com
5 years ago
Worth noting that it will not return private parameters of parent class...
so it works exactly as get_class_vars or get_object_vars
up
0
articice at ua dot fm
5 months ago
runaurufu is not quite right, get_class_vars() does not return protected params, while this one does.

Thus it's extremely useful when having an abstract parent class and protected properties overriding in children.
For example, I use a class factory and one of the children has some static test methods that still need to output a paramether name, like $this->name, etc. With this example code, one can use static::getNotStaticProperty('name'), but not get_class_vars('name').

Try it:

trait static_reflector {
    /*
     * a purely static function that returns default properties of the non-static instance of the same class
     */
    static protected function getNonStaticProperty($key) {
        $me = get_class();
        $reflectionClass = new \ReflectionClass($me);
        $properties_list = $reflectionClass->getDefaultProperties();
        if (isset($properties_list[$key]))
            return $var_name = $properties_list[$key];
        else throw new RuntimeException("BUG: Unable to reflect non-static property '{$key}' from default properties of class {$me}");
    }
}

class a {

    use \static_reflector;

    protected $key_a = 'test ok';

    public static function test() {
        echo static::getNonStaticProperty('key_a')."\n";

        try {
            print static::getNonStaticProperty('key_b');
            echo "FAIL No exception thrown";
        } catch (RuntimeException $e) {
            echo "OK ".$e->getMessage();
        }

    }
}

echo get_class_vars('a')['key_a'];
a::test();

this will return:
Notice: Undefined index: key_a in ...
test ok
OK BUG: Unable to reflect non-static property 'key_b' from default properties of class a

ps: Yes, this is copied from a unit test.
up
-7
captainjester at hotmail dot com
6 years ago
This will return all properties in a class and any parent classes.  The array will have keys set to the property names and empty values.
To Top