[英]Doctrine: String keys with Array hydration
根據他們的文檔 ,在出於只讀目的而檢索數據時,應使用陣列水合而不是記錄水合。
但是,這意味着我必須使用數組和字符串鍵訪問檢索到的對象的屬性:
$user['Phonenumbers'][0]['number']
而不是OO風格:
$user->PhoneNumbers[0]->number
現在,我對PHP有點陌生,但是在其他語言中,我使用第二種表示法會更好,因為在編譯時會捕獲錯別字,而字符串文字的錯別字要到運行時才會被發現。 這是否適用於PHP / Doctrine?
兩種表示法中的錯別字在編譯時都不會被捕獲。 兩種符號中的Typos只會產生PHP_NOTICE
並且應用程序將繼續運行,除非您嘗試執行一些非法操作(例如,調用未定義的方法)。
考慮將“電話號碼”錯誤地鍵入“電話號碼”:
$number = $user['Phonenombers'][0]['number']; // Notice: Undefined index
$number = $user->PhoneNombers[0]->number; // Notice: Undefined property
或在將“用戶”錯誤鍵入“用戶”的情況下:
$number = $userr->PhoneNombers[0]->number;
// Notice: Undefined variable
// Notice: Trying to get property of non-object
在上述所有情況下,變量$number
將設置為NULL
。
另一方面,以下代碼將導致PHP_ERROR
並且腳本將停止執行
$userr->free(); //Fatal error: Call to undefined method
以上所有示例僅在腳本運行時執行時PHP_ERROR
分別生成PHP_NOTICE
或PHP_ERROR
。 例如,以下代碼不會產生任何PHP_NOTICE
或PHP_ERROR
:
if(false) {
$userr->free();
}
因此,最后,答案是否定的,這不適用於PHP / Doctrine。 如果不需要Doctrine_Collection
對象的任何方法,則應改用數組水合,因為它速度更快且使用的內存更少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.