【问题标题】:PHP dynamically reference objectPHP动态引用对象
【发布时间】:2012-09-09 00:34:20
【问题描述】:

我正在尝试找到一种方法来对所有现有对象使用 print_r() ,而不必手动将它们作为函数中的参数传递。目前使用它进行调试并这样做:

function($obj1 as null){

// insert styling here

    print_r(get_object_vars($obj1));

// insert more styling

}

现在,我必须为每个页面上的每个对象使用此函数。管理起来变得很多。最好只有一个函数使用某种集合来使用 get_object_vars 输出对象变量。

在写这篇文章时,我想为每个对象创建一个包含变量的类。然后在我的每个类的 __construct 中,使用该对象将自己分配给新类。但是,这将是很多工作,而且似乎效率低下。

【问题讨论】:

    标签: php oop dynamic reference


    【解决方案1】:

    看起来你真的想要一个调试器!但是如果我认为你是对的,那么动态地(在任何时候存在的所有对象上)唯一真正的方法是让它们向调试类注册。您可以编写一个执行此操作的类,并让所有其他类扩展该类(尽管它宁愿踩到您拥有的任何现有类层次结构,并且可能也会破坏垃圾收集器!

    另一种节省一些代码的部分解决方案是在每次调试调用时列出要在数组中输出的对象,然后循环遍历它们。

    foreach(array('var1', 'var2', 'var3') as $name) {
        debug($$name);
    }
    

    Variable variables

    【讨论】:

    • 像上面的帖子一样,使用变量变量($$),不幸的是它不起作用。这是我在提出问题之前尝试使用 get_declared_classes 函数的原始方法。 foreach(get_declared_classes() as $ObjectName){ ?>
       print_r(get_object_vars($$ObjectName));?>

      } ?>
    • 在什么情况下不起作用?我认为你的版本的问题是 get_declared_classes 给你一个类列表,而不是变量。如果您有一个名为 $var 的 MyClass 类型的变量,那么 MyClass 将出现在 get_declared_classes 中,但不会出现在 var 中。因此,变量变量将查找 $MyClass,但找不到。
    【解决方案2】:

    这就是你要找的吗?

    http://php.net/manual/en/function.get-defined-vars.php

    该页面上有许多 cmets 解释了如何将函数用于各种目的(一个可能相关的一个可能只返回您的变量)。

    即使这样仍然只处理当前范围内的变量以及在调用 get_defined_vars 之前已声明的变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多