ReflectionClass::getDefaultProperties
(PHP 5)
ReflectionClass::getDefaultProperties — Gets default properties
Description
Gets default properties from a class (including inherited properties).
Note:
This method only works for static properties when used on internal classes. The default value of a static class property can not be tracked when using this method on user defined classes.
Parameters
This function has no parameters.
Return Values
An array of default properties, with the key being the name of
the property and the value being the default value of the property or NULL
if the property doesn't have a default value. The function does not distinguish
between static and non static properties and does not take visibility modifiers
into account.
Examples
Example #1 ReflectionClass::getDefaultProperties() example
<?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());
?>
The above example will output:
array(5) { ["staticProperty"]=> string(14) "staticProperty" ["property"]=> string(15) "propertyDefault" ["privateProperty"]=> string(22) "privatePropertyDefault" ["defaultlessProperty"]=> NULL ["inheritedProperty"]=> string(16) "inheritedDefault" }
See Also
- ReflectionClass::getProperties() - Gets properties
- ReflectionClass::getStaticProperties() - Gets static properties
- ReflectionClass::getProperty() - Gets a ReflectionProperty for a class's property
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения, относящиеся к переменным и типам
- Reflection
- Функция ReflectionClass::__construct() - Создаёт объект класса ReflectionClass
- Функция ReflectionClass::export() - Экспортирует класс
- Функция ReflectionClass::getConstant() - Возвращает определенную константу
- Функция ReflectionClass::getConstants() - Возвращает константы
- Функция ReflectionClass::getConstructor() - Возвращает конструктор класса
- Функция ReflectionClass::getDefaultProperties() - Возвращает свойства по умолчанию
- Функция ReflectionClass::getDocComment() - Возвращает doc-блоки комментариев
- Функция ReflectionClass::getEndLine() - Возвращает номер последней строки
- Функция ReflectionClass::getExtension() - Возвращает объект класса ReflectionExtension для расширения, определенного в классе
- Функция ReflectionClass::getExtensionName() - Возвращает имя расширения, определенного в классе
- Функция ReflectionClass::getFileName() - Возвращает имя файла, в котором объявлен класс
- Функция ReflectionClass::getInterfaceNames() - Возвращает имена интерфейсов
- Функция ReflectionClass::getInterfaces() - Возвращает интерфейсы
- Функция ReflectionClass::getMethod() - Возвращает экземпляр ReflectionMethod для метода класса
- Функция ReflectionClass::getMethods() - Возвращает список методов в виде массива
- Функция ReflectionClass::getModifiers() - Возвращает информацию о модификаторах класса
- Функция ReflectionClass::getName() - Возвращает имя класса
- Функция ReflectionClass::getNamespaceName() - Возвращает название пространства имён
- Функция ReflectionClass::getParentClass() - Возвращает родительский класс
- Функция ReflectionClass::getProperties() - Возвращает свойства
- Функция ReflectionClass::getProperty() - Возвращает экземпляр ReflectionProperty для свойства класса
- Функция ReflectionClass::getShortName() - Возвращает короткое имя
- Функция ReflectionClass::getStartLine() - Возвращает номер начальной строки
- Функция ReflectionClass::getStaticProperties() - Возвращает static свойства
- Функция ReflectionClass::getStaticPropertyValue() - Возвращает значение static свойства
- Функция ReflectionClass::getTraitAliases() - Возвращает массив trait-псевдонимов
- Функция ReflectionClass::getTraitNames() - Возвращает массив trait-имён, задействованных в этом классе
- Функция ReflectionClass::getTraits() - Возвращает массив traits, задействованных в этом классе
- Функция ReflectionClass::hasConstant() - Проверяет, задана ли константа
- Функция ReflectionClass::hasMethod() - Проверяет, задан ли метод
- Функция ReflectionClass::hasProperty() - Проверяет, задано ли свойство
- Функция ReflectionClass::implementsInterface() - Проверяет, реализуется ли интерфейс
- Функция ReflectionClass::inNamespace() - Проверяет, определён ли класс в пространстве имён
- Функция ReflectionClass::isAbstract() - Проверяет, является ли класс абстрактным
- ReflectionClass::isAnonymous
- Функция ReflectionClass::isCloneable() - Проверяет, можно ли клонировать этот класс
- Функция ReflectionClass::isFinal() - Проверяет, является ли класс окончательным (final)
- Функция ReflectionClass::isInstance() - Проверяет, принадлежит ли объект классу
- Функция ReflectionClass::isInstantiable() - Проверяет, можно ли создать экземпляр класса
- Функция ReflectionClass::isInterface() - Проверяет, является ли класс интерфейсом
- Функция ReflectionClass::isInternal() - Проверяет, является ли класс встроенным в расширение или в ядро
- Функция ReflectionClass::isIterateable() - Проверяет, является ли класс итерируемым
- Функция ReflectionClass::isSubclassOf() - Проверяет, является ли класс подклассом
- Функция ReflectionClass::isTrait() - Проверяет, является ли класс trait
- Функция ReflectionClass::isUserDefined() - Проверяет, является ли класс пользовательским
- Функция ReflectionClass::newInstance() - Создаёт экземпляр класса с переданными аргументами
- Функция ReflectionClass::newInstanceArgs() - Создаёт экземпляр класса с переданными параметрами
- Функция ReflectionClass::newInstanceWithoutConstructor() - Создаёт новый экземпляр класса без вызова конструктора
- Функция ReflectionClass::setStaticPropertyValue() - Устанавливает значение static-свойства
- Функция ReflectionClass::__toString() - Возвращает строковое представление объекта класса ReflectionClass
Коментарии
Worth noting that it will not return private parameters of parent class...
so it works exactly as get_class_vars or get_object_vars
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.