是否有可能檢查並查看一個對象是否已用php實例化?我有一個MySQL類,其他頁面實例化使用它的方法,我做的是做一個日誌記錄所有查詢。我注意到mysql一次打開3-4次而不是一次。所以我需要驗證對象是否實例化,如果不是,它不會創建另一個並打開另一個無用的連接。如何檢查對象是否已被實例化?
2
A
回答
5
你正在尋找一個singleton
3
可以使用的instanceof操作員檢查一個給定的變量是一類特殊的:
if ($db instanceof DatabaseClass) :
瞭解更多關於在這裏:http://php.net/instanceof
6
聽起來像是Singleton模式的完美案例。
class Connection
{
/**
* @var Connection
*/
private static $instance;
private static $config = array();
private function __construct()
{
// whatever you need in here, just keep the method private
}
public function __clone()
{
throw new RuntimeException;
}
public function __wakeup()
{
throw new RuntimeException;
}
public static setConfig(array $config)
{
self::$config = $config;
}
public static function getInstance()
{
if (null === self::$instance) {
self::$instance = new self();
}
return self::$instance;
}
}
2
只需使用is_object
,作爲一類沒有類型,但只是有內存分配,所以使用is_object
上一個類名只會返回一個字符串,當您通過使用new關鍵字實例化一個對象,對象在內存中創建並具有客觀類型。
測試用例:
class HelloWorld{}
$a = is_object(HelloWorld);
$b = is_object(new HelloWorld);
var_dump($a, $b);
結果:
布爾(假)布爾(真)
+0
這對我不起作用。如果沒有「新」,php會假設它是一個常量。您必須創建該類的對象並將該對象變量傳遞給is_object函數。 –
相關問題
- 1. 如何檢查一個對象是否被實例化?
- 2. 如何檢查結構是否已被實例化?
- 3. 檢查一個對象是否已經在Java中實例化
- 4. 檢查JavaScript對象已經被實例化
- 5. 檢查是否打字稿類已經被實例化
- 6. 檢測COM對象是否已註冊或實例化(iTunes)
- 7. 如何檢查BitmapImage實例是否被初始化? WPF
- 8. 查詢實例是否已被釋放
- 9. 如何檢查對象是否是特定類的實例?
- 10. 如何檢查對象是否是IE中NodeList的實例?
- 11. 檢查類被實例化
- 12. 如何找出對象已被實例化的地方?
- 13. C#&統一 - 對象不能被轉換爲bool(檢查是否對象被實例化)
- 14. 如何檢查傳統ASP中是否存在對象實例?
- 15. 檢查一個類是否已經在iOS中實例化了
- 16. 檢查類模板是否已實例化?
- 17. 檢查如果一個類已被實例化
- 18. 如何檢查結構是否已被初始化?
- 19. 如何獲取對象是否已被檢索注入
- 20. 測試對象是否被正確的參數值實例化
- 21. EF:檢查對象是否已被修改
- 22. 檢查是否一些對象已經被測試
- 23. Monitor.TryEnter檢查對象是否已被鎖定?
- 24. 如何檢查類實例是否已創建或爲空C#
- 25. 如何檢查模型實例是否已更新
- 26. 如何檢查indexedDB實例是否已打開?
- 27. 我如何檢查是否twisted.internet.protocol實例已經斷開
- 28. 如何檢查另一個Derby實例是否已經啓動?
- 29. 如何檢查表單的實例是否已經存在?
- 30. 檢查對象是否被釋放
你忘了'__sleep' /'__wakeup'漏洞。 – Wrikken
@Wrikken在別人回答之前,我正在趕它;) – Phil
哈,你仍然對我輸了:P但你得到了upvote,因爲我懶得從手冊中複製它。如果你鏈接到手冊的相關部分,我會刪除我的&upvote你的。 – Wrikken