get_class_vars
すべてのパブリック変数を取得しますが、プライベート変数にアクセスしたい.
子クラスの変数を取得しようとして、親クラスから実行しています...
class A
{
function getvars()
{
/* get private vars from child */
}
}
class B extends A
{
private $name;
}
これを行う別の方法はありますか?
get_class_vars
すべてのパブリック変数を取得しますが、プライベート変数にアクセスしたい.
子クラスの変数を取得しようとして、親クラスから実行しています...
class A
{
function getvars()
{
/* get private vars from child */
}
}
class B extends A
{
private $name;
}
これを行う別の方法はありますか?
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 メソッドのフィルターを変更したり、完全に省略したりできることに注意してください (ここでは、プライベートのみのフィルターを示しています)。
それらを配列で取得するには、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();
必要に応じて、保護されていると宣言すると、親クラスと拡張クラスのプロパティに直接アクセスできるようになります。
他の方法は、このプロパティを導入するクラスで保護された/パブリックのゲッター/セッター関数を定義することです。
最も難しいのは、親クラスReflectionObject
で onを使用し$this
てプライベート プロパティのリストを取得し、それらのアクセシビリティを変更することです。