热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php怎么调用私有方法吗的简单介绍

导读:很多朋友问到关于php怎么调用私有方法吗的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览:

导读:很多朋友问到关于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怎么调用私有方法吗的相关内容解答汇总了,希望对您有所帮助!如果解决了您的问题欢迎分享给更多关注此问题的朋友喔~


推荐阅读
  • 本文详细探讨了Java中HashMap类的hash()方法的工作原理及其重要性,特别是在JDK 7版本中的实现。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • 一、背景这段时间刚好有时间,帮朋友做一个简单的系统管理网站,因为朋友买的空间是虚拟机,支持的PHP版本在5.5以下,所以只好挑一个老框架,为了快速便捷开发,我就选择了ThinkPH ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 深入解析Unity3D游戏开发中的音频播放技术
    在游戏开发中,音频播放是提升玩家沉浸感的关键因素之一。本文将探讨如何在Unity3D中高效地管理和播放不同类型的游戏音频,包括背景音乐和效果音效,并介绍实现这些功能的具体步骤。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 如何在Lua中调用C语言编译的动态链接库
    本文介绍了如何在Lua中调用C语言编译的动态链接库。通过详细步骤和示例代码,帮助开发者理解和掌握这一技术。参考了《Lua编程入门》一书中的相关内容,并结合实际操作经验,提供了更加清晰和实用的指导。此外,还探讨了在不同操作系统下编译和链接Lua的方法,为跨平台开发提供了有价值的参考。 ... [详细]
  • 实现Nginx对ThinkPHP URL重写及PATHINFO支持的详细方法解析【PHP开发】
    在PHP后端开发中,实现Nginx对ThinkPHP的URL重写及PATHINFO支持是一项常见的需求。本文详细解析了经过多次尝试和研究,最终找到的一种有效配置方法,能够确保URL_MODERewrite功能正常运行,并提供稳定的服务。此外,文章还探讨了相关配置项的具体作用及其优化建议,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 本指南详细介绍了如何从零开始搭建ThinkPHP项目环境。首先,我们将创建一个名为“test”的PHP项目,并导入ThinkPHP框架。接下来,配置单入口文件,确保项目能够正确运行。ThinkPHP作为一个基于单一入口模式的PHP框架,简化了开发流程。通过本文,读者将学会如何高效地设置和测试ThinkPHP项目。 ... [详细]
  • php从哪里得到框架(2023年最新分享)
    导读:本篇文章编程笔记来给大家介绍有关php从哪里得到框架的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、如何用PHP制 ... [详细]
  • 本文目录一览:1、php月薪多少合适2、php ... [详细]
  • sublime php 方法,SublimePHPNinJaManual
    软件简介SublimePHPNinJaManual是Sublime中的函数手册提示,中文,其他语言的可以通过命令生成由来自己因为sublime中没有一个 ... [详细]
  • Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了。这一新特性对以往的操作方法使用没有任何影响,你也可以用 ... [详细]
  • 导读:很多朋友问到关于入门学什么php框架简单的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
author-avatar
放逐凌晨_690
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有