ReflectionClass::getDefaultProperties

(PHP 5, PHP 7, PHP 8)

ReflectionClass::getDefaultPropertiesデフォルトプロパティを取得する

説明

public ReflectionClass::getDefaultProperties(): array

クラスのデフォルトプロパティ (継承したプロパティを含む) を取得します。

注意:

このメソッドで static プロパティを扱えるのは、内部クラスの場合だけです。 ユーザー定義クラスで使った場合は、 クラスの static なプロパティのデフォルト値はこのメソッドでは追跡できません。

パラメータ

この関数にはパラメータはありません。

戻り値

デフォルトプロパティの配列を返します。プロパティ名が配列のキー、 そしてそのプロパティのデフォルト値が配列の値 (デフォルト値が存在しない場合は null) となります。 この関数はstaticプロパティとそうでないプロパティを区別せず、 アクセス修飾子も考慮しません。

例1 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());
?>

上の例の出力は以下となります。

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

参考

add a note

User Contributed Notes 2 notes

up
4
articice at ua dot fm
9 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 okOK BUG: Unable to reflect non-static property 'key_b' from default properties of class aps: Yes, this is copied from a unit test.
up
2
runaurufu AT gmail.com
14 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