【问题标题】:PHP - how to get a variable's name? [duplicate]PHP - 如何获取变量的名称? [复制]
【发布时间】:2013-04-02 20:52:58
【问题描述】:

我想创建一个用于调试目的的小函数,它以人类可读的格式打印变量的内容。

该函数基于 CakePHP 框架中的pr() 快捷方式,即this one

到目前为止我有这个:

function pr($var,$msg){
    $pr_debug=true;
    if($pr_debug){
        echo "<pre>";
        if($msg) echo "<b>".$msg.": </b>";
        if(gettype($var)=="array" || gettype($var)=="object" ) echo "<br>";
        print_r($var);
        echo "</pre>";
    }
}

在变量内容之前打印一条可选消息 ($msg)。

但我想补充的是,如果没有发送消息,也可以打印变量的名称作为这样的消息,所以我可以得到这样的东西:

$myvar="hello";
pr($myvar); 

//应该输出:

myvar: hello

所以在我的函数中,我怎样才能将变量的名称作为字符串来输出呢? 即pr($foo); 我需要"foo"$name="biz"; pr($$name);我需要"biz", 等等……

最好我想要一些尽管 PHP 全局配置或任何配置都可以工作的东西(顺便说一下,我不太了解,所以非常感谢任何关于 GLOBALS 的帮助)。

谢谢!

额外:在stackoverflow,我如何格式化源代码以获取PHP 格式和颜色?到目前为止,我简单地使用了 textarea 中的工具栏并选择了“代码示例”...

【问题讨论】:

  • 你应该接受一个字符串作为输入而不是一个变量,然后使用$$var获取变量的值,使用$var获取变量的名称。
  • 意识到当你有一个函数 function foo($a) 时,$a 最初可能是一个函数的返回值,一个代数表达式,一个文字值,或者任何数量的东西命名变量。
  • 我试图概述一些为什么这对于旧问题不是一个有用的想法的一些原因:stackoverflow.com/a/15936154/157957

标签: php variables namespaces


【解决方案1】:

你想要的是可变变量……但事实上,你并不想要它们。它们几乎和现代编程中的“goto”一样糟糕:

$foo = 'bar';
$baz = 'foo';
echo $$baz;   // bar
     ^^-- note the doubled $'s

问题是,当您获得调试代码时,变量名称的“来源”已经丢失,例如

function debug($out) {
   global $$out;
   echo $out, ': ', $$out;
}

$foo = 'bar';
debug($foo);

这不会输出“foo”作为名称,因为名称“$foo”没有传递给函数。只有$foo 的VALUE,即bar 进入。

【讨论】:

  • 但如果我不调用 debug($foo) 而是将其称为 debug("foo"),那么它将按预期工作,回显“foo: bar”,这就是我想要的!因此,无需直接将 $var 作为参数传递,我只需修改我的函数以接收变量的 NAME 作为字符串,然后将其与 $$ 一起使用以获取其内容。我说的对吗?
  • 是的,但请记住,在函数中,该变量无论如何都会超出范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
相关资源
最近更新 更多