PHP通过反射方法调用执行类中的私有方法

PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。

下面我们演示一下如何通过反射,来调用执行一个类中的私有方法:

<?php
 
//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);
?>

时间: 2024-11-01 23:42:04

PHP通过反射方法调用执行类中的私有方法的相关文章

回调方法不执行-javs中的回调方法是怎么样的

问题描述 javs中的回调方法是怎么样的 javs中的回调方法是怎么样的 只要方法返回值类型是布尔类型的方法就是回调方法吗 解决方案 参考这篇文章:http://blog.csdn.net/zuolongsnail/article/details/6598226

怎么实现javascript中调用java类中的方法

问题描述 body中部分代码如:<center><font size="4" color="red">吊灯</font> <input type="button" id="diaodeng" value=<%=state[0]%> onclick="dianji1()"><br><br><br><br>

spring-通过类反射调用的类中,通过Spring @Autowired 装载失败

问题描述 通过类反射调用的类中,通过Spring @Autowired 装载失败 使用了@Autowired注释,自动装配成员变量,正常情况下没有问题,但是当这个类通过java的反射机制调用时,自动装配失败,成员变量时空值,出现空指针异常. 解决方案 已经解决了,不过觉得破坏了框架,可能真的没法办法吧,现在贴出来我自己解决的办法 //手动注入,防止反射无法注入 private void ManulInject(){ ApplicationContext apx=new ClassPathXmlA

内部类-Java编程中A类如何调用B类中M方法里的C类的实例?

问题描述 Java编程中A类如何调用B类中M方法里的C类的实例? import java.awt.*; import java.awt.event.*; public class TestListener{ public static void main(String[] args){ Counter c1 = new Counter("Hello"); c1.CreatButton(); c1.add(c1.button); ----------------------------(

调用方法-怎么用一个对象调用另一个类中对象的方法

问题描述 怎么用一个对象调用另一个类中对象的方法 怎么用一个对象调用另一个类中对象的方法 比如一个类A ,一个类B,B里面有个方法show(),在main中A a=new A();B b=new B();在A中没有调用B方法的情况下,我想通过a调用B中的show()方法,该怎么实现.初学者,求大神给我指导下,不知道我表达的是否准确 解决方案 首先,确认下你是想在A类的某个方法中调用B类的方法吗?如果是的话,A必须依赖B,依赖方法可以是A类关联一个B类的成员变量,示例代码: public clas

java-HTML中js如何调用C#类中的方法

问题描述 HTML中js如何调用C#类中的方法 js代码: //搜索跳转至中转页 function Search(id) { var Sou1 = document.getElementById('Sou1') var T1 = Sou1.value; if (id == "1") { if (Sou1.value != "") { top.location.href = 'web/Search.aspx?S=1&T=' + T1; } } } C#类代码:

java static-假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗

问题描述 假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗 假设下面这种情况,test1中的do方法会被初始化吗? public class test{ public static void main(string []args){ test1 t: } } class test1{ int i: static void do(){} } 解决方案 第一次访问的含义是,访问了这个静态类中的任何方法.属性.字段,那么所有的属性都会被初始化. 解决方案二: 方法

在派生类中对虚方法进行重载

先让我们回顾一下普通的方法重载.普通的方法重载指的是:类中两个以上的方法(包括隐藏的继承而来的方法),取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法. 而对基类虚方法的重载是函数重载的另一种特殊形式.在派生类中重新定义此虚函数时,要求的是方法名称.返回值类型.参数表中的参数个数.类型.顺序都必须与基类中的虚函数完全一致.在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static或virtual修饰符. 还是让我

PHP类中的魔术方法(Magic Method)简明总结_php实例

1. __construct()和__destruct() 在实例被 创建/销毁 的时候被调用,都可以传递0个或多个参数. class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj); Note:The destructor method will be called as soon as