我注意到,當我嘗試從NULL對象訪問屬性時,PHP不會引發異常。它是否正確?我希望會有像其他語言一樣的錯誤。PHP在訪問NULL對象的屬性時不會引發異常?
0
A
回答
1
它報告錯誤,通知,更正確
<?php
error_reporting(-1);
$var = null;
$var->prop;
echo 'Hello!';
結果:
Notice: Trying to get property of non-object in /..../prog.php on line 6
Hello!
1
你應該得到一個PHP通知警告,它會是這個樣子:
PHP Notice: Trying to get property of non-object in [...]
如果不是,你應該檢查你的錯誤設置。雖然在發展,試圖儘可能地看到所有的PHP錯誤/警告/通知,這樣就可以儘可能地修理你的代碼中設置
error_reporting(-1);
。
2
不,只是訪問未定義成員的警告。如果你願意,你可以用__get()神奇的功能手動添加例外到類:
class foo {
public function __get($name)
{
throw new Exception($name . ' does not exist in foo');
}
}
現在班會表現你是如何期待。
$bar = new foo();
$x = $bar->something;
回聲出:5及更高版本
Fatal error: Uncaught exception 'Exception' with message 'something does not exist in foo' in C:\web\xampp\htdocs\stupid2.php:7 Stack trace: #0 C:\web\xampp\htdocs\stupid2.php(14): foo->__get('something') #1 {main} thrown in C:\web\xampp\htdocs\test.php on line 7
0
異常處理的引入,對所有在建功能尚未實現。
如果您想獲取異常,您可以隨時檢查變量是否爲空或不是對象,並拋出可由catch塊處理的自定義異常。
要獲取錯誤,警告和通知,您可以使用PHP.ini文件的開發版本。或者只是搜索php.ini文件,查找Error handling and logging
部分,並將error_reporting
設置爲E_ALL
,查找display_errors
並將其設置爲on
。然後重新啓動您的Web服務器以使設置生效。
相關問題
- 1. 實體框架 - 對null對象的轉換屬性不會引發異常?
- 2. 訪問OpenStruct中不存在的屬性時引發異常
- 3. 引發的異常是NullPointerException:無法獲得null對象的屬性'userId'
- 4. EXC_BAD_ACCESS訪問屬性時的異常
- 5. 訪問使用startup.cs初始化的屬性時引發空引用異常
- 6. PHP訪問對象的屬性
- 7. 訪問具有屬性的php對象
- 8. 訪問PHP對象的屬性
- 9. 訪問php對象的多個屬性
- 10. 熊貓數據幀索引訪問在出界時不會引發異常?
- 11. NHibernate的JoinQueryOver與不可見的屬性會引發異常
- 12. 對象的訪問屬性
- 13. 訪問PHP 7對象屬性
- 14. 無法訪問PHP對象屬性
- 15. 當訪問會話屬性時,Tomcat和空指針異常
- 16. JavaScript:將屬性添加到密封對象應該會引發typeerror異常?
- 17. 在Pandas中訪問錯誤的列標籤時不會引發異常?
- 18. Javers拋出異常時屬性爲null
- 19. AmChart引用屬性'chart'在打印引用對象時不爲null,但在嘗試訪問state.chart時'chart'屬性變爲null?
- 20. 騾子異常:所需的對象/屬性muleContext爲null
- 21. 爲什麼我不能訪問的對象屬性在foreach PHP
- 22. 對象的不可訪問屬性
- 23. 異常不會引發
- 24. 聲明對象時訪問屬性?
- 25. 當作爲迭代訪問時引導到屬性的對象
- 26. LuaInterface:訪問對象屬性
- 27. 訪問AppDelegate對象屬性
- 28. 訪問對象屬性
- 29. Javascript - 訪問對象屬性
- 30. 訪問對象屬性
那麼腳本的執行不會停止?它只記錄錯誤並繼續。正確? –
不幸的是,由於某些原因,PHP開發人員認爲允許程序員忽略錯誤可能很有用。 – Crozin