ノノログ

ホーム / ブログ / PHPでprivate、protectedな変数、メソッドにアクセスする関数書いた

PHPでprivate、protectedな変数、メソッドにアクセスする関数書いた

PHPUnitを使っていて、テストで隠蔽されたクラス内の変数にアクセスする必要があったので、関数作った。

 

// privateにアクセスする
function getPrivateMember($object, $varName){
$className = get_class($object);
$ary = (array)$object;
return $ary["\0".$className."\0".$varName];
}
// protectedにアクセスする
function getProtectedMember($object, $varName){
$ary = (array)$object;
return $ary["\0*\0".$varName];
}

 

PHP5.3.2以上ならprivate(protected)なメソッドへもアクセス可能

// アクセス不可なメソッドへアクセス
function callPrivateMethod($object, $methodName, $args = array()){
if (!is_array($args)) $args = array($args);
$reflMethod = new ReflectionMethod($object, $methodName);
$reflMethod->setAccessible(true);
return $reflMethod->invokeArgs($object, $args);
}
このエントリーをはてなブックマークに追加