2012-09-28 60 views
1
$someClass sc=new SomeClass(); 

我想知道的是,如果構造函數由於某種原因失敗(如可能沒有足夠的內存),變量sc中將會出現什麼內容。我找不到直接的答案?在Php中,當一個對象無法實例化時會發生什麼?

+2

沒什麼,整個腳本將失敗。另外請注意,這不是你如何在PHP中聲明變量。 –

回答

2

構造函數可以失敗主要有兩個原因:

  1. 缺貨的存儲器;不是唯一的對象,這會導致致命的錯誤,您的腳本不會繼續。

  2. exception被拋出;除非使用'try-catch'子句捕獲異常,否則腳本將停止。

try { 
    $sc = new SomeClass(); // exception is thrown inside the constructor 
} catch (Exception $e) { 
    echo "Yikes, object didn't get created; error = {$e->getMessage()}\n"; 
} 
+0

請注意'try ... catch'不會捕獲致命錯誤,除非您使用PHP 7並捕獲'Throwable'類錯誤。 – Narayon

3

隨着你的內存問題的例子,你會得到一個致命的錯誤和PHP停止執行。你永遠不會得到變數$ sc的分配。

0

首先,對象啓動的語法不正確,需要爲$sc = new SomeClass();而且您將得到內存耗盡錯誤,並且不會創建變量$sc

0

當任何其他類型的代碼出於某種原因(比如沒有足夠的內存等)而發生同樣的事情時:PHP運行時發出致命錯誤,就是這樣。對象構造函數並不特殊。

相關問題