PHP 8.4.1 Released!

ReflectionClass::getDefaultProperties

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getDefaultPropertiesObtém propriedades padrão

Descrição

public ReflectionClass::getDefaultProperties(): array

Obtém propriedades padrão de uma classe (incluindo propriedades herdadas).

Nota:

Este método só funciona para propriedades estáticas quando usado em classes internas. O valor padrão de uma propriedade de classe estática não pode ser rastreado ao usar este método em classes definidas pelo usuário.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Um array de propriedades padrão, com a chave sendo o nome da propriedade e o valor sendo o valor padrão da propriedade ou null se a propriedade não tiver um valor padrão. A função não distingue entre propriedades estáticas e não estáticas e não aceita modificadores de visibilidade em conta.

Exemplos

Exemplo #1 Exemplo de 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());
?>

O exemplo acima produzirá:

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

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
4
articice at ua dot fm
8 years 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
2
runaurufu AT gmail.com
13 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
To Top