Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 有什么好方法可以看出变量的来源吗?_Php - Fatal编程技术网

Php 有什么好方法可以看出变量的来源吗?

Php 有什么好方法可以看出变量的来源吗?,php,Php,我在跟踪一个变量,我可以打印出该变量的值,但我不知道该值在哪里(哪一页)传递给该变量。有什么好方法可以打印出该值的实际来源吗?一个好的起点是函数。它本身不会跟踪变量的传递位置,但会显示所有函数以及包含/必需的文件,并带有行号。为什么不在正在回溯的页面中选中$\u POST/$\u GET variables。是否确定无法使用grep/search实用程序找到变量?如果您使用的是linux,则可以键入: grep -rn "variable_name" . var_dump( $variable

我在跟踪一个变量,我可以打印出该变量的值,但我不知道该值在哪里(哪一页)传递给该变量。有什么好方法可以打印出该值的实际来源吗?

一个好的起点是函数。它本身不会跟踪变量的传递位置,但会显示所有函数以及包含/必需的文件,并带有行号。

为什么不在正在回溯的页面中选中$\u POST/$\u GET variables。是否确定无法使用grep/search实用程序找到变量?

如果您使用的是linux,则可以键入:

grep -rn "variable_name" .
var_dump( $variable_name );
查看变量引用的文件(以及这些文件上的行号)

我也总是喜欢检验我的假设。因此,如果您怀疑页面上的变量可能已更改,可以键入:

grep -rn "variable_name" .
var_dump( $variable_name );
看看它的价值。通过移动它,您可以将其归零并找到所设置变量的源


我希望这有助于…

回顾调试和一些问题

在PHP中,没有编程方法来确定变量“派生”到哪里

良好的调试技巧是你的朋友。一定要查看张贴的其他答案。在此重述:

  • debug\u print\u backtrace()
    -让您知道包含哪些文件
  • 从站点的顶层使用grep-rn“variable\u name”。查看它的存在位置
  • 在一堆地方添加
    var\u dump($variable)
    ,一次添加一个变量也有助于跟踪变量在不同状态下的情况
  • 另外:
    使用一个好的调试器会有很大帮助。一个广泛使用的调试器扩展是Xdebug

    要寻找的两个潜在问题是:
    eval()
    extract()

    这两种方法都可以“神奇地”使变量存在,这在以前是不存在的


    当然,解决此问题的最佳方法是不使用全局变量。或者至少要尽可能少。无论是MVC还是其他类型的代码,都可以有一个定义良好的代码流。然后您将知道代码的执行顺序以及变量的实例化和/或传递位置。

    是否有函数可以像function_name($variable)一样使用,以查看变量的来源。我尝试了debug_print_backtrace(),它只是打印出了包含的页面,但是页面太多了,我无法检查所有页面。我使用grep搜索并找到了$variable的原始版本,但我不确定它是否位于正确的位置。另一件事是$variable已经通过几个页面传递了,我想知道所有页面。可能您添加了一个print语句来在每个页面上打印该变量的值。如果您想使用程序实现这一点,[link]应该会帮助您。另一种方法是在代码中添加一个片段,将变量值附加到具有页面名称的文件中。您可以在浏览页面后检查此文件,以查看每个页面上的变量值