3

get_class_varsすべてのパブリック変数を取得しますが、プライベート変数にアクセスしたい.

子クラスの変数を取得しようとして、親クラスから実行しています...

class A
{
    function getvars()
    {
        /* get private vars from child */
    }
}

class B extends A
{
    private $name;
}

これを行う別の方法はありますか?

4

3 に答える 3

8

PHP の ReflectionClass を使用することをお勧めします。特にgetProperties()コール。

PHPのドキュメントは次のとおりです。

http://www.php.net/manual/en/reflectionclass.getproperties.php

サンプルは次のようになります。

class A
{
    function getvars()
    {
        $reflection = new ReflectionClass($this);
        $vars = $reflection->getProperties(ReflectionProperty::IS_PRIVATE);
        var_dump($vars);
    }
}

class B extends A
{
    private $name;
}

また、getProperties メソッドのフィルターを変更したり、完全に省略したりできることに注意してください (ここでは、プライベートのみのフィルターを示しています)。

于 2013-03-29T22:16:59.613 に答える
3

それらを配列で取得するには、ReflectionClass を使用します。その後、やりたいことは何でもできます。画面に名前を出力するコードの例。

class TestPrivate {

public $var1;
public $var2;
public $var3;
private $var4;
private $var5;
public $var6;

public function getPrivateVars() {
     $reflect = new ReflectionClass(__CLASS__);
     $vars   = $reflect->getProperties(ReflectionProperty::IS_PRIVATE);

     foreach ($vars as $privateVar) {
         echo $privateVar->getName() . "<br />";
            }               

        }
    }   




$instance = new TestPrivate();
$instance->getPrivateVars();
于 2013-03-29T22:35:28.330 に答える
1

必要に応じて、保護されていると宣言すると、親クラスと拡張クラスのプロパティに直接アクセスできるようになります。

他の方法は、このプロパティを導入するクラスで保護された/パブリックのゲッター/セッター関数を定義することです。

最も難しいのは、親クラスReflectionObjectで onを使用し$thisてプライベート プロパティのリストを取得し、それらのアクセシビリティを変更することです。

于 2013-03-29T22:14:03.267 に答える