私は次のようなものを持っています:
class a {
private $firstVar;
function foo(){
print_r( get_class_vars( 'b' ) );
}
}
class b extends a{
public $secondVar;
}
a::foo();
print_r( get_class_vars( 'b' ) );
出力は
Array ( [secondVar] => [firstVar] => )
Array ( [secondVar] => )
これは、get_class_vars('b') が呼び出されたときに firstVar にアクセスできるためだと思いますが、関数 foo() を取得して、親変数なしでクラス 'b' 変数のみを出力するにはどうすればよいでしょうか?
http://php.net/manual/en/function.get-class-vars.phpには、a 変数を取得し、次にすべての a 変数と b 変数を取得してから、両方にある変数を削除して残すという解決策があります。 b 変数だけです。しかし、この方法は面倒に思えます。別の方法はありますか?
現在使用している回避策:
class a {
private $firstVar;
function foo(){
$childVariables = array();
$parentVariables = array_keys( get_class_vars( 'a' ));
//array of 'a' and 'b' vars
$allVariables = array_keys( get_class_vars( get_class( $this ) ) );
//compare the two
foreach( $allVariables as $index => $variable ){
if( !(in_array($variable, $parentVariables))){
//Adding as keys so as to match syntax of get_class_vars()
$childVariables[$variable] = "";
}
}
print_r( $childVariables );
}
}
class b extends a{
public $secondVar;
}
$b = new b;
$b->foo();