PHP有可能註銷一個用register_shutdown_function()
設置的函數(或所有函數)嗎?您可以取消註冊關機功能嗎?
21
A
回答
21
我不相信你可以。註銷回調函數的唯一方法是將其封裝在某種只根據特定條件實際調用它的類中。像這個方便的功能包裝:
class UnregisterableCallback{
// Store the Callback for Later
private $callback;
// Check if the argument is callable, if so store it
public function __construct($callback)
{
if(is_callable($callback))
{
$this->callback = $callback;
}
else
{
throw new InvalidArgumentException("Not a Callback");
}
}
// Check if the argument has been unregistered, if not call it
public function call()
{
if($this->callback == false)
return false;
$callback = $this->callback;
$callback(); // weird PHP bug
}
// Unregister the callback
public function unregister()
{
$this->callback = false;
}
}
基本用法:
$callback = new UnregisterableCallback(array($object, "myFunc"));
register_shutdown_function(array($callback, "call"));
要註銷
$callback->unregister();
現在,調用的時候,它會返回錯誤,而不是調用回調函數。簡化這個過程可能有幾種方式,但是它可行。
簡化它的一種方法是將回調的實際註冊放入回調函數的方法中,這樣外界不必知道您必須傳遞給register_shutdown_function的方法是「call 」。
1
您好我做了輕微修改我的函數擔任的方式如下:
function onDie(){
global $global_shutdown;
if($global_shutdown){
//do shut down
}
}
$global_shutdown = true;
register_shutdown_function('onDie');
//do code stuff until function no longer needed.
$global_shutdown = false;
相關問題
- 1. 我可以在PHP中註冊多個關閉功能嗎?
- 2. 您可以取消/取消CheckoutId嗎?
- 3. 註冊關機功能列表
- 4. 使用'RegisterWindowMessage'註冊的消息是否可以取消註冊?
- 5. GCM和PhoneGap - 註冊和取消註冊JS功能問題
- 6. 是否可能取消註冊BroadCast Lister
- 7. Monotouch:取消註冊許可
- 8. 取消註冊從DriverManager.getDrivers()返回的驅動程序可以嗎?
- 9. 註冊功能
- 10. 註冊功能
- 11. jQuery/Ajax - 關注/取消關注按鈕,重複功能
- 12. 您可以註冊Chrome擴展的OpenSearch網址嗎?
- 13. 您可以從Adobe Air訪問Windows註冊表嗎?
- 14. 關於GCM取消註冊的建議
- 15. Winforms - 關於註冊/取消註冊事件的問題
- 16. 取消註冊singledispatch?
- 17. XMPP取消註冊
- 18. Yii2無法註冊關機功能控制器動作
- 19. 您可以在運行時更改註釋消息嗎?
- 20. pushwoosh註冊並取消註冊
- 21. DLL註冊和取消註冊
- 22. 遠程註冊/取消註冊BroadcatReceiver
- 23. 取消註冊後重新註冊$ watch
- 24. Django模型註冊/取消註冊不能與配置文件
- 25. 取消註冊性能計數器
- 26. 檢索已註冊BroadcastReceiver的實例以取消註冊
- 27. 取消註冊RemotingConfiguration取消註冊衆所周知的類型
- 28. 如何取消c2dm註冊/取消註冊請求
- 29. 我可以註冊一個BROADCAST RECEIVER並在另一個活動中取消註冊嗎? - Android
- 30. 我可以註冊一個對象嗎?
在PHP 5.3或更高版本,你可以使用魔術方法「__invoke」,從而使該對象本身可以傳遞給'register_shutdown_function'。 – Brilliand 2014-01-04 00:51:18