簡體   English   中英

原則:具有數組水合的字符串鍵

[英]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_NOTICEPHP_ERROR 例如,以下代碼不會產生任何PHP_NOTICEPHP_ERROR

if(false) {
   $userr->free();
}

因此,最后,答案是否定的,這不適用於PHP / Doctrine。 如果不需要Doctrine_Collection對象的任何方法,則應改用數組水合,因為它速度更快且使用的內存更少。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM