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); }