《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.snjht.com/jiaocheng/8192.html