【问题标题】:php dynamic class inheritancephp动态类继承
【发布时间】:2011-02-07 17:47:50
【问题描述】:

我知道我可以通过执行在运行时生成一个类

$obj = (object)array('foo' => 'bar');+

这样我可以使用

echo $obj->foo; //bar

如果想让 $obj 从现有类继承怎么办?

我想要达到的目标: 我在 github (https://github.com/balanza/paris) 上分叉了 paris 项目。这是一个活跃的记录类。我想知道我需要为每个对象声明一个类,即使它是空的:

class User extends Model{}

我想我可能会使用动态对象来避免这些无聊的东西。

【问题讨论】:

  • 所以你想要一种完全模糊的方法来创建一个从类扩展的对象,因为定义类很“无聊”?此外,如果您的扩展类为空,那么 $obj = new Model(); 有什么问题?还是那也“无聊”?
  • (object)array() 不会“在运行时生成类”,它会创建一个对象。这是一个重要的区别。

标签: php inheritance runtime dynamicobject dynamic-class-creation


【解决方案1】:

您总是可以使用eval('class User extends Model{}'),但这不是一个好主意。真的,您应该只在文件中创建类,然后操作码缓存将正常工作,可以进行版本跟踪等。

tl;dr:定义模型类,它是 Right Thing To Do™。

【讨论】:

    【解决方案2】:

    如果您真的没有其他方法可以做到这一点,您可以使用我的 Dynherit 类创建“动态”继承。它创建您想要的继承,但来自文件并且仅使用您尚未加载的类。

    下载 v0.62:http://optimisationphp.komrod.com/source/sha/test/dynamic_inheritance_01/dynherit_v0.62.zip

    GitHub 链接:https://github.com/Komrod/Dynherit

    【讨论】:

      【解决方案3】:

      严格按照您的问题,我认为可能的唯一方法是使用Runkit,它可以让您即时重新声明类。不确定该解决方案的便携性如何。

      【讨论】:

        猜你喜欢
        • 2011-12-28
        • 2018-03-10
        • 1970-01-01
        • 1970-01-01
        • 2013-07-10
        • 2016-03-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        相关资源
        最近更新 更多