如何使用其他类中的PHP魔法常量?

如何使用其他类中的PHP魔法常量?,php,debugging,Php,Debugging,我在文件info.php中创建了以下函数,用于在页面加载期间调试变量和数据 class Info { static function watch($what,$msg='',$more=FALSE) { echo "<hr/>"; echo "<br/>".$msg.":"; if( is_array($what) || is_object($what) ) { ec

我在文件
info.php
中创建了以下函数,用于在页面加载期间调试变量和数据

 class Info {
    static function watch($what,$msg='',$more=FALSE)
    {
        echo "<hr/>";
        echo "<br/>".$msg.":";
        if( is_array($what) || is_object($what) )
        {
            echo "<pre>";
            print_r($what);
            echo "</pre>";
        }
        else{
                echo $what;
        }
       if($more) 
       {
            echo "<br/>METHOD:".__METHOD__;
            echo "<br/>LINE:".__LINE__;
       }
    }
 }
一切正常,但方法和线条如下所示

METHOD: Testpost::gtPostdata()
LINE:5( where this function is called in Testpost class)
但我想在下面展示

 <?php
    class Info {
        static function watch($what,$msg='',$more=FALSE)
        {
            echo "<hr/>";
            echo "<br/>".$msg.":";
            if( is_array($what) || is_object($what) )
            {
                echo "<pre>";
                print_r($what);
                echo "</pre>";
            }
            else{
                    echo $what;
            }
           if($more) 
           {

                $backtrace = debug_backtrace();
                if (isset($backtrace[1])) 
                {
                    echo "<br/>METHOD:".$backtrace[1]['function'];
                    echo "<br/>LINE:".$backtrace[1]['line'];
                }

           }
        }
     }
那么,如果我将
$more=TRUE
放入
watch()
中,那么方法和行号应该与调用它的类保持一致,该怎么做呢

我可以在监视方法中使用
self::
parent::
??还是别的什么
请建议我如何从其他类调用magic常量,或者是否有其他方法来调试varaibale??(请不要建议使用
Xdebug
或任何其他工具)

您不能在该范围内使用这些常量。请检查函数debug\u backtrace()。如果它给你太多的信息,试着解析它

您不能使用该范围中的那些常量。请检查函数debug\u backtrace()。如果它给你太多的信息,试着解析它

您必须使用php函数

你也有以下问题的解决方案。享受!:)

您必须使用php函数

你也有以下问题的解决方案。享受!:)


debug\u bactrace是完全自动化的唯一方法,但它是一个“繁重”的功能。。。。执行速度非常慢,需要解析以提取所需信息。这可能看起来很麻烦,但更好的解决方案是将必要的信息传递给您的Info::watch方法:

类信息{
静态函数监视($whereClass、$whereLine、$what、$msg=''、$more=FALSE)
{ 
回声“
”;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
回显“
”。$msg.:”;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
if(is_数组($what)| is_对象($what)) { 回声“;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
打印(什么); 回声“;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} 否则{ 回声$什么;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} 如果(更多美元) { echo“
方法:”.$whereClass;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
回声“
行:.$whereLine;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} } } 现在,我从另一个页面index.php调用这个方法,其中包含info.php 类Testpost{ __construct(){//一些基本初始化} 函数getPostdata($postarray){ $postarray=$\u POST; 信息::watch(_方法,_线,$postarray,'postarray',TRUE); }
debug\u bactrace是完全自动化的唯一方法,但它是一个“重载”函数……执行速度非常慢,需要解析以提取所需信息。它可能看起来很麻烦,但更好的解决方案是将必要的信息传递给您的Info::watch方法:

类信息{
静态函数监视($whereClass、$whereLine、$what、$msg=''、$more=FALSE)
{ 
回声“
”;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
回显“
”。$msg.:”;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
if(is_数组($what)| is_对象($what)) { 回声“;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
打印(什么); 回声“;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} 否则{ 回声$什么;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} 如果(更多美元) { echo“
方法:”.$whereClass;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
回声“
行:.$whereLine;
class Testpost {
    __construct() { // some basic intializtion }
    function getPostdata($postarray) {
              $postarray=$_POST;
    Info::watch($postarray,'POST ARRAY', TRUE);
}
} } } 现在,我从另一个页面index.php调用这个方法,其中包含info.php 类Testpost{ __construct(){//一些基本初始化} 函数getPostdata($postarray){ $postarray=$\u POST; 信息::watch(_方法,_线,$postarray,'postarray',TRUE); }
为什么你使用了
$backtrace[1]
,难道我们不能使用
$backtrace[0]
??我想如果我使用
$backtrace[0]['line']
它会给出正确的行号
$backtrace[0]
它是“你自己”,就像在类本身一样。
$backtrace[1]
显示调用信息的方法调用的行为什么您使用了
$backtrace[1]
,我们不能使用
$backtrace[0]
??我已经计算出,如果我使用
$backtrace[0]['line']
它会给出正确的行号
$backtrace[0]
它是“你自己”,就像在类本身一样。
$backtrace[1]
显示了调用信息的方法调用的行,我已经在代码中这样做了,但是每次我都要写
\uuuuu方法\uuuuu
\uuu行\uuuuuuuu
,这就是我问问题的原因。无论如何,谢谢你的回答,我已经在代码中做了,但我必须写
\uu方法\uuuuuuu
\uuuu行每次,这就是我问这个问题的原因。无论如何,谢谢你的回答