php 在运行时创建类方法

标签 php reflection

我想知道是否有一种方法可以在运行时将新方法附加到类中,在 php.ini 中。 我的意思是,不是在实例级别,而是直接在类中,以便所有新创建的实例都有这个新方法。 这样的事情可以用反射来完成吗?

谢谢

最佳答案

是的,你可以。

下面是在 php 5.4.x 中运行时创建方法的方法。

匿名函数由 5.3.x 开始的 Closure 类表示。从 5.4.x 开始,它添加了一个 Closure::bind。将匿名函数绑定(bind)到特定对象或类的静态方法。

例子:

class Foo {
     private $methods = array();

     public function addBar() {
       $barFunc = function () {
         var_dump($this->methods);
       };
       $this->methods['bar'] = \Closure::bind($barFunc, $this, get_class());
     }

     function __call($method, $args) {
          if(is_callable($this->methods[$method]))
          {
            return call_user_func_array($this->methods[$method], $args);
          }
     }
 }

 $foo = new Foo;
 $foo->addBar();
 $foo->bar();

关于php 在运行时创建类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10985926/

相关文章:

c# - 将 FieldInfo 转换为 C# 中的列表

c# - 为什么 Type.GetElementType 返回 null?

php - JavaScript 和 PHP 中的 Web 服务之间的安全通信

javascript - 无法通过 AJAX post 访问 $_SESSION 数据

c# - 反射式地在 C# 中实现泛型类型推断

c# - 如何知道 MemberInfo 是否是属性的显式实现

java - 查找运行 Main 的子类名称

php - 如何在 PHP 中删除字符串末尾的所有特定字符?

php - 该语句总是返回 false

javascript - 循环遍历数组