《PHP编程:反射调用private方法实践(php、java)》要点:
本文介绍了PHP编程:反射调用private方法实践(php、java),希望对您有用。如果有疑问,可以联系我们。
PHP实例单测中有个普遍性的问题,被侧类中的private办法无法直接调用.小拽在处理过程中通过反射改变办法权限,进行单测,分享一下,直接上代码.
PHP实例简单被测试类
PHP实例生成一个简单的被测试类,只有个private办法.
代码如下:
<?php/** * 崔小涣单测的基本模板. * * @author cuihuan * @date 2015/11/12 22:15:31 * @version $Revision:1.0$ **/class MyClass {/** * 私有办法 * * @param $params * @return bool */private function privateFunc($params){if(!isset($params)){return false;}echo "test success";return $params;}}
PHP实例单测代码
代码如下:
<?php/*************************************************************************** * * $Id: MyClassTest T,v 1.0 PsCaseTest cuihuan Exp$ * **************************************************************************//** * 崔小涣单测的基本模板. * * @author cuihuan * @date 2015/11/12 22:09:31 * @version $Revision:1.0$ **/require_once ('./MyClass.php');class MyClassTest extends PHPUnit_Framework_TestCase {const CLASS_NAME = 'MyClass';const FAIL = 'fail';protected $objMyClass;/** * @brief setup: Sets up the fixture, for example, opens a network connection. * * 可以看做phpunit的构造函数 */public function setup() {date_default_timezone_set('PRC');$this->objMyClass = new MyClass();}/** * 利用反射,对类中的private 和 protect 办法进行单元测试 * * @param $strMethodName string :反射函数名 * @return ReflectionMethod obj :回调对象 */protected static function getPrivateMethod($strMethodName) {$objReflectClass = new ReflectionClass(self::CLASS_NAME);$method = $objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return $method;}/** * @brief :测试private函数的调用 */public function testPrivateFunc(){$testCase = 'just a test string';// 反射该类$testFunc = self::getPrivateMethod('privateFunc');$res = $testFunc->invokeArgs($this->objMyClass, array($testCase));$this->assertEquals($testCase, $res);$this->expectOutputRegex('/success/i');// 捕获没有参数异常测试try { $testFunc->invokeArgs($this->transfer2Pscase, array());} catch (Exception $expected) {$this->assertNotNull($expected);return true;}$this->fail(self::FAIL);}}
PHP实例运行结果
PHP实例cuihuan:test cuixiaohuan$ phpunit MyClassTest.php PHPUnit 4.8.6 by Sebastian Bergmann and contributors.Time: 103 ms, Memory: 11.75MbOK (1 test, 3 assertions)
PHP实例关键代码阐发
PHP实例封装了一个,被测类方法的反射调用;同时,返回方法之前处理方法的接入权限为true,便可以拜访private的函数方法.
代码如下:
/** * 利用反射,对类中的private 和 protect 办法进行单元测试 * * @param $strMethodName string :反射函数名 * @return ReflectionMethod obj :回调对象 */protected static function getPrivateMethod($strMethodName) {$objReflectClass = new ReflectionClass(self::CLASS_NAME);$method = $objReflectClass->getMethod($strMethodName);$method->setAccessible(true);return $method;}
PHP实例下面给大家分享java中利用反射调用另一类的private办法
PHP实例我们知道,Java应用程序不能拜访持久化类的private方法,但Hibernate没有这个限制,它能够拜访各种级别的方法,如private, default, protected, public. Hibernate是如何实现该功能的呢?答案是利用JAVA的反射机制,如下:
PHP实例
<span style="font-size:14px;">import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo {
public static void main(String[] args) throws Exception {
Method method = PackageClazz.class.getDeclaredMethod("privilegedMethod", new Class[]{String.class,String.class});
method.setAccessible(true);
method.invoke(new PackageClazz(), "452345234","q31234132");
}
}
class PackageClazz {
private void privilegedMethod(String invokerName,String adb) {
System.out.println("---"+invokerName+"----"+adb);
}
}</span>
PHP实例输出成果为:---452345234----q31234132
维易PHP培训学院每天发布《PHP编程:反射调用private方法实践(php、java)》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/8192.html