PHP 8.6.0 Beta 1 is available for testing

ReflectionClass::getDefaultProperties

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getDefaultPropertiesВозвращает свойства по умолчанию

Описание

public function ReflectionClass::getDefaultProperties(): array

Возвращает свойства класса по умолчанию (включая унаследованные свойства).

Замечание:

Этот метод работает только для статических свойств при использовании с внутренними классами. Значение по умолчанию статического свойства нельзя отслеживать в классах, определённых пользователем.

Список параметров

Сигнатура функции не содержит параметров.

Возвращаемые значения

Ассоциативный массив (array ) свойств по умолчанию, ключами которого являются имена свойств, а значениями - соответствующие значения по умолчанию или же null , если этому свойству не было задано значение по умолчанию. Функция не различает статические и нестатические свойства, а также не предоставляет информацию о модификаторах видимости при выводе.

Примеры

Пример #1 Пример использования ReflectionClass::getDefaultProperties()

<?php
class Bar {
 protected $inheritedProperty = 'унаследованное свойство по умолчанию';
}
class Foo extends Bar {
 public $property = 'свойство по умолчанию';
 private $privateProperty = 'закрытое свойство по умолчанию';
 public static $staticProperty = 'статическое свойство';
 public $defaultlessProperty;
}
$reflectionClass = new ReflectionClass('Foo');
var_dump($reflectionClass->getDefaultProperties());
?>

Результат выполнения приведённого примера:

array(5) {
 ["staticProperty"]=>
 string(39) "статическое свойство"
 ["property"]=>
 string(40) "свойство по умолчанию"
 ["privateProperty"]=>
 string(57) "закрытое свойство по умолчанию"
 ["defaultlessProperty"]=>
 NULL
 ["inheritedProperty"]=>
 string(69) "унаследованное свойство по умолчанию"
}

Смотрите также

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 2 notes

up
4
articice at ua dot fm
10 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
15 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
+Добавить

AltStyle によって変換されたページ (->オリジナル) /