2012-09-16 64 views
0

我試圖找到一種方法來使用print_r()在我所有的現有對象上,而無需手動將它們作爲參數傳遞給函數。目前用於調試和這樣做:PHP動態引用對象

function($obj1 as null){ 

// insert styling here 

    print_r(get_object_vars($obj1)); 

// insert more styling 

} 

現在,我必須使用這個函數爲我的每個頁面上的每個對象。這變得很重要。如果只有一個函數會使用某種集合來使用get_object_vars輸出對象變量,那將會很不錯。

在寫這篇文章時,我想到了爲每個對象創建一個包含變量的類。然後在每個類的__construct中,使用該對象將自身分配給新類。但是,這將是很多工作,似乎效率低下。

回答

0

它看起來像你真的想要一個調試器!但是,如果我認爲你是對的,那麼動態實現它的唯一真正方法(在任何時候都存在的所有對象上)就是讓它們註冊一個調試類。你可以編寫一個這樣做的類,並且讓所有其他類擴展該類(儘管它對所有現有的類層次結構都有所幫助,並且可能會破壞垃圾回收器的一點功能)

另一個部分解決方案一些代碼在每個調試調用列出要輸出數組中,並遍歷它們的對象。

foreach(array('var1', 'var2', 'var3') as $name) { 
    debug($$name); 
} 

Variable variables

+0

像上面的帖子,使用變量變量($$),不幸的是它不工作。這是我在提出問題之前使用get_declared_classes函數嘗試的原始方法。 <? 的foreach(get_declared_classes()作爲$的ObjectName){ ?>


<? } ?> – Raythe

+0

它以什麼方式不起作用?我認爲你的版本的問題是,get_declared_classes給你一個類的列表,而不是變量。如果你有一個名爲$ var的類型爲MyClass的變量,那麼MyClass將出現在get_declared_classes中,但不是var。因此變量變量將會尋找$ MyClass,但是不會找到它。 – gandaliter

0

難道這是你在找什麼?

http://php.net/manual/en/function.get-defined-vars.php

該頁面上有很多評論,解釋如何使用該功能的各種用途(一個可能相關的只返回你的變量)。

即使這樣,它仍然只在當前範圍內執行變量,而在調用get_defined_vars之前已經聲明瞭變量。