導航:首頁 > 編程語言 > 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調用私有方法相關的資料

熱點內容
雲點播電影網php源碼 瀏覽:93
pythonclass使用方法 瀏覽:222
移動加密軟體去哪下載 瀏覽:281
php彈出alert 瀏覽:207
吉林文檔課件加密費用 瀏覽:131
感測器pdf下載 瀏覽:284
隨車拍app綁定什麼設備 瀏覽:897
方維團購系統源碼 瀏覽:991
linux反彈shell 瀏覽:159
列印機介面加密狗還能用嗎 瀏覽:301
二板股票源碼 瀏覽:448
度人經pdf 瀏覽:902
怎麼配置android遠程伺服器地址 瀏覽:960
java程序員看哪些書 瀏覽:943
什麼app可以免費和外國人聊天 瀏覽:797
pdf手寫筆 瀏覽:182
別永遠傷在童年pdf 瀏覽:990
愛上北斗星男友在哪個app上看 瀏覽:421
主力散戶派發源碼 瀏覽:671
linux如何修復伺服器時間 瀏覽:61