導航:首頁 > 編程語言 > php調用私有方法

php調用私有方法

發布時間:2022-08-17 15:14:31

php的類的private變數調用問題

因為__get(); __set() 方法在類的內部,類的內部是可以調用類的私有屬性的變數

㈡ 反射調用private方法實踐(php、java)

單測中有個普遍性的問題,被側類中的private方法無法直接調用。小拽在處理過程中通過反射改變方法許可權,進行單測,分享一下,直接上代碼。
簡單被測試類
生成一個簡單的被測試類,只有個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/***************************************************************************
*
*
$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);}}
運行結果
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)
關鍵代碼分析
封裝了一個,被測類方法的反射調用;同時,返回方法之前處理方法的接入許可權為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;}
下面給大家分享java中利用反射調用另一類的private方法
我們知道,Java應用程序不能訪問持久化類的private方法,但Hibernate沒有這個限制,它能夠訪問各種級別的方法,如private,
default,
protected,
public.
Hibernate是如何實現該功能的呢?答案是利用JAVA的反射機制,如下:
<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>
輸出結果為:---452345234----q31234132

㈢ php 中使用private static 方法名 是什麼意思

private 關鍵字聲名 一個私有的方法或屬性;定義了private的方法或屬性在類的外部不能訪問,只能在本類中使用。
類中使用私有方法:
$this->屬性 或 方法()
static 關鍵字 是創建一個靜態方法或靜態屬性;定義了static 的方法或屬性不需要實例化就可以使用。
訪問靜態變數 類名::$變數名;
訪問靜態方法 類名::方法名();
訪問本類靜態變數 self::$變數名;
訪問本類靜態方法 self::方法名();
訪問父類靜態變數 parent::$變數名;
訪問父類靜態方法 parent::方法名();

㈣ php如何通過子類繼承父類共有方法訪問父類私有屬性

在父類中加個public方法,
如private
$aaa
=
'test';
public
function
getAAA(){
return
$this->aaa;
}
在子類中調用parent::getAAA();就可以獲得父類私有屬性
當然如果你想獲取多個,可以改成動態變數名,
getAAA($v){
return
$this->{$v};
}

㈤ php子類可以繼承和訪問父類的私有屬性和方法嗎

你這樣理解也可以,當父類有私有的方法和屬性,子類是繼承不到的,所以子類不能訪問父類的私有方法和屬性。java
特性,private:類中只要限定為private的成員,只能被這個類本身訪問

㈥ PHP怎麼調用其他類的方法

在Java的調用方法是import,而在PHP中沒有import這個函數,一般PHP中調用其他類是用到require(),具體PHP調用其他類的方法如下:

1、首先應該先有一個文件名為tool.php的文件,在文件中聲明一個類。

(6)php調用私有方法擴展閱讀:

類是變數與作用於這些變數的函數的集合。使用下面的語法定義一個類:

<?php

class Cart { var $items; // 購物車中的物品

// 將 $num 個 $artnr 物品加入購物車

function add_item($artnr, $num) {

$this->items[$artnr] += $num;

} // 將 $num 個 $artnr 物品從購物車中取出

function remove_item($artnr, $num) {

if ($this->items[$artnr] > $num) {

$this->items[$artnr] -= $num; return true;

} elseif

($this->items[$artnr] == $num) {

unset($this->items[$artnr]); return true;

} else {

return false; }

}

} ?>

上面的例子定義了一個 Cart 類,這個類由購物車中的商品構成的數組和兩個用於從購物車中添加和刪除商品的函數組成。

㈦ [php]private public protected 三者沒弄明白

public,公開的,是所有實例都可以訪問
protected,受保護的,只有存在繼承關系的可以訪問,比如子類,父類
private,私有的,只有對應的類內部能夠調用

閱讀全文

與php調用私有方法相關的資料

熱點內容
仿微博app源碼 瀏覽:777
怎麼取消調用app 瀏覽:545
程序員去哪裡求助 瀏覽:834
伺服器里的埠是什麼 瀏覽:975
aspnetjavaphp 瀏覽:397
程序員畢業時間 瀏覽:285
程序員用戶免費軟體 瀏覽:753
51單片機匯編語言指令 瀏覽:139
女程序員好難 瀏覽:687
三田壓縮機與電裝 瀏覽:710
重生細胞安卓版沒鍵盤怎麼玩 瀏覽:994
小米nfc手機刷加密卡 瀏覽:290
linux如何下載文件 瀏覽:808
linuxrpm依賴 瀏覽:370
匯率pdf 瀏覽:353
帶分數的演算法思維 瀏覽:115
如何讓伺服器支持asp文件 瀏覽:48
python網站自動簽到腳本 瀏覽:889
程序員和語言框架哪個重要 瀏覽:777
文件伺服器上面有什麼 瀏覽:383