我個人看不出這是可能的,或者你爲什麼會想要做這種方式。首先,我懷疑debug_backtrace()
比變量static
貴很多。
正如您所指出的那樣,調用之間似乎會改變的唯一回溯特性是行號(函數被調用的地方)。而且,如果你在一個循環中運行函數,那甚至都不會改變,因爲它們都將在每次迭代時從同一行調用。
我如果是你,我會堅持使用狀態變量;至於你的同事,如果你對它的工作原理感到好奇(我知道我是!),你或許可以讓他向你展示一個代碼來展示他的方法。
編輯(從註釋):基本上,同事的debug_backtrace()
方法存儲在使用被稱爲類的鍵陣列的布爾值。
用簡單的英語,這裏發生了什麼:
- 被稱爲 「JS」 調用函數?
- 如果是這樣,請存儲在JS標籤的數組中;否則,使用CSS標籤的數組。
- 檢查是否指定了類;如果不是,請使用這個類。
- 如果我們有一個布爾值給定的類在標籤數組中,這不是第一次。
- 否則,將給定類的布爾值設置爲爲true。
我知道你在想什麼:這沒有任何意義,它甚至不存儲調用函數的名字!你說得對;這種方法是不可擴展的,並且具有巨大的開銷。
如果你想要做這個方法所做的事情,只需在有問題的類中使用一個靜態變量來跟蹤函數是否被調用。您的同事的方法—對不起,說—是低效率和無效。
您是否嘗試過兩次運行函數並比較debug_backtrace的輸出? –
是的。輸出僅在數組[0] ['Line']中有所不同,即只有行號改變......我猜想這是正確的,因爲堆棧跟蹤沒有改變。它仍然使用相同的規則和路徑調用相同的函數。 – Rash