导读:很多朋友问到关于php怎么调用私有方法吗的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!
本文目录一览:
1、php私有函数如何调用
2、php怎么访问对象中的private
3、thinkphp调用私有方法
4、php中怎么类外访问私有方法?
5、反射调用private方法实践(php、java)
php私有函数如何调用
class
myclass:
def
__init__(self):
print
"initialize..."
def
__play(self):
print
"play..."
a
=
myclass()initialize...
a._myclass__play()play...
dir(a)['_myclass__play',
'__doc__',
'__init__',
'__module__']python的私有是伪的,还是可以访问到。
方法就是_类名__方法名,python不过是在以__开头的方法名面前加了小动作导致访问不到看起来像私有方法。
php怎么访问对象中的private
私有属性方法在对象外不能访问,在对象内可以访问,那么你可以写一个共有public的方法,在方法里对对象里的私有属性方法采取调用就可以了。所谓私有就是避免对象外的乱改,加个方法起限制
thinkphp调用私有方法
私有方法只能类自己调用。你可以在UserModel里定义一个共有方法,这个共有方法里面调用了他自身的私有方法getAge()。这样在UserAction在去调用这个共有方法,就间接的实现了调用这个私有方法。
PS:私有方法只能自己调用。这样做才实现了私有方法的作用,这样做是出于安全方面的考虑
php中怎么类外访问私有方法?
你问的是私有方法还是私有属性?
你说的__get __set 是访问和设置属性用的。
__call才是访问方法用的。
但这两种都需要修改原始类,既然有这个权限了,那私有方法有什么必要定义呢?
另外一种获取私有属性或调用私有方法的思路是通过反射:
//MyClass这个类中包含了一个名为myFun的私有方法
class MyClass {
private $tmp = 'hello';
private function myFun()
{
echo $this-tmp . ' ' . 'world!';
}
}
//通过类名MyClass进行反射
$ref_class = new ReflectionClass('MyClass');
//通过反射类进行实例化
$instance = $ref_class-newInstance();
//通过方法名myFun获取指定方法
$method = $ref_class-getMethod('myFun');
//设置可访问性
$method-setAccessible(true);
//执行方法
$method-invoke($instance);
//获取属性
$property = $ref_class-getProperty('tmp');
//打印属性
var_dump($property);
不知道你提这个单纯是个问题,还是有别的需求,可以多看看php手册学习一下。
php 访问控制
php 反射
反射调用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
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怎么调用私有方法吗的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~