Php 如何知道变量初始化或上次修改的位置

Php 如何知道变量初始化或上次修改的位置,php,Php,在PHP中,是否有任何方法可以知道变量是在哪里初始化的或是第一次赋值的,还是最后一次修改的 我认为应该可以知道这一点,因为PHP在错误中给出了一些这样的提示。例如:无法重新声明abc()(以前在/path/to/file.php中声明) 编辑: 我需要这个,因为: function abc() { global $page; //this should be int. if($page == 2) { ... } } 但是当这个函数运行时;我得到错误无法将对象转换为int。这是因为

在PHP中,是否有任何方法可以知道变量是在哪里初始化的或是第一次赋值的,还是最后一次修改的

我认为应该可以知道这一点,因为PHP在错误中给出了一些这样的提示。例如:
无法重新声明abc()(以前在/path/to/file.php中声明)

编辑: 我需要这个,因为:

function abc() {
   global $page; //this should be int.
   if($page == 2) { ... }
}

但是当这个函数运行时;我得到错误
无法将对象转换为int
。这是因为我的代码$page中的某些地方被任何对象覆盖。我需要找到它被修改过的地方。否则我就得把整个代码都翻一遍。

如果你想知道变量是在哪里定义的,那你就倒霉了;除了实际查看代码并找到它之外,没有其他方法可以找到它

您的问题似乎是允许变量进入函数(使用
global
)。因为变量是在函数外部定义的,所以可以随时修改它。如果希望始终知道变量包含的内容,则应将其作为参数传递:

$page = 2;
function abc($page) {
   if($page == 2) { ... }
}
$test = abc($page);
如果您想确保变量的值是一个数字,那么您可以通过简单地验证参数(或
global
变量)来发现:


您可以使用本机php函数get_class()找出分配给$page变量的对象:

您通常希望使用单元测试来调试它,在单元测试中,您将测试变量$page是否为数字

如果您只想在屏幕上调试,请尝试:

if(is_object($page)){
     die(get_class($page));
    }
或通过例外:

if(is_object($page)){
 throw new Exception('$page must be numeric object given of type : '.get_class($page));
}

这将帮助您找到分配给变量的对象,并为您指明正确的方向。

您能告诉我们为什么需要它吗?跟踪函数声明的位置和变量的修改位置是两件不同的事情。后者需要保存程序整个状态的历史记录,这简直是太贵了。什么?什么意思
变量已初始化
?您的错误表明函数被声明为againBTW,这是尽可能限制变量范围的另一个好论点。如果你的应用程序中存在的变量非常普遍,以至于你甚至无法找出它们的值上次被修改的位置,那么你的代码就是无法维护的。是的,谢谢你再次证明了为什么
global
是个糟糕的主意。。。恐怕你得把所有的代码都翻一遍。这就是为什么您不应该首先编写这样的代码的原因。:)我认为功能重新声明不是问题的一部分。这只是PHP“跟踪信息”的一个例子。@deceze是的,你是对的。我删除了关于函数的部分。非常感谢。
if(is_object($page)){
     die(get_class($page));
    }
if(is_object($page)){
 throw new Exception('$page must be numeric object given of type : '.get_class($page));
}