2013-04-10 187 views
-2

我想爲調試目的製作一個小功能,以可讀的格式打印變量的內容。PHP - 如何獲取變量的名稱?

該功能是基於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格式和顏色?截至目前,我simpy使用工具欄在textarea,並選擇「代碼示例」...

+1

您應該接受一個字符串作爲輸入而不是變量,然後使用'$$ var'獲取變量的值並使用'$ var'獲取名稱的變量。 – 2013-04-10 20:20:04

+1

認識到當你有一個函數'function foo($ a)'時,'$ a'最初可能是函數,代數表達式,文字值或任何未命名的東西的返回值變量。 – 2013-04-10 20:25:02

+0

我試圖概述一些爲什麼這是不是這樣一個有用的想法對老問題的一些原因:http://stackoverflow.com/a/15936154/157957 – IMSoP 2013-04-10 21:05:50

回答

0

你想要的是變量變量......但事實上,你不希望他們。他們幾乎一樣糟糕,在現代編程「轉到」:

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

問題是,當你到達你的調試代碼的時候,該varaible的名字「源」已丟失,例如

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

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

這不會輸出「foo」作爲名稱,因爲名稱'$ foo'沒有傳遞給函數。只有$foo的值,即bar進去。

+0

但如果不是調用調試($ foo)我將其稱爲調試(「foo」),然後它將按預期工作,並回顯「foo:bar」,這正是我想要的!所以,我不需要直接將$ var作爲參數傳遞,而只需要修改我的函數以接收變量的NAME(字符串),然後將其與$$一起用於獲取它的內容。我對嗎? – DiegoDD 2013-04-10 21:31:22

+0

是的,但請記住,在該函數內,該變量反正會超出範圍。 – 2013-04-10 22:48:41