静态方法,用于返回实际使用它的类和方法


Static method to return the class and method it's actually used in

这就是我想做的:我希望能够很好地调试我的应用程序。

我有这个静态 html::d ebug($var),我想返回使用它的类和方法以及变量名称及其内容,而不知道它将使用的类的名称提前。

如果我使用 _CLASS_getClass(),它会返回实例化的类 HTML。我想返回使用它的类和方法。

例如,它不是实际的代码:

class HTML
{
    static function debug($var)  {
            echo "<pre style='"border: 1px solid #000; height: {9em};
                  overflow: auto; margin: 0.5em;'">"; 
            echo '<b><u><font color = brown> In '.__CLASS__.'</u> : </font></b>';

            echo '<b><u><font color = brown> In '.get_class($this).'</u> : </font></b>';
            var_dump($var);    
            echo "</pre>'n";
     }
}
Class MyClass
{
      function myMethod()   {
      $variable = 'my_temp_var';
      html::debug($variable);
      }
}

好了,谢谢。

如何作为额外的参数发送到调试调用类的方法?喜欢:

html::debug($variable,$this);

然后使用get_class($classReceived)

我能想到的唯一方法是使用调用堆栈。我不认为 PHP 中还有其他东西可以做你想做的事?可能是错的。

所以如果你要使用类似的东西..

$calledFrom = debug_backtrace( DEBUG_BACKTRACE_PROVIDE_OBJECT, 1 );

这将为您提供上一个调用堆栈条目的数组。由于多种原因,它确实不理想,但它会解决您的问题。

注意:最后一个参数是限制,我相信这只是 5.4。如果您使用的是早于此版本的版本,请删除。

有关完整文档和输出,请参阅此处:http://php.net/manual/en/function.debug-backtrace.php

这是不可能的,这表明你走错了路。方法永远不需要知道谁调用了它;如果它需要改变其行为,则告诉它如何使用参数。

好吧,我撒谎了:从技术上讲,可以通过debug_backtrace,但这是一个永远不应该在生产代码中使用的解决方案。但似乎在您的情况下,这正是您想要的:打印调试信息。