Доктрина: струнные ключи с увлажнением массива - PullRequest
1 голос
/ 17 января 2011

Согласно их документации , вы должны использовать гидрацию массива вместо записи гидратации при получении данных только для чтения.

Однако это означает, что я должен получить доступ к атрибутам найденного объекта, используя массивы и строковые ключи:

$user['Phonenumbers'][0]['number']

вместо стиля ОО:

$user->PhoneNumbers[0]->number

Теперь я немного новичок в PHP, но в других языках, с которыми я работал, 2-я нотация была бы предпочтительнее, потому что опечатки будут перехватываться во время компиляции, тогда как опечатки в строковых литералах не будут замечаться до времени выполнения. Относится ли это к PHP / Doctrine?

1 Ответ

0 голосов
/ 27 января 2011

Опечатки в обеих системах обозначений НЕ будут обнаружены во время компиляции.Опечатки в обоих обозначениях приведут только к PHP_NOTICE, и приложение продолжит работу, если вы не попытаетесь выполнить какую-либо недопустимую операцию (например, вызвать неопределенный метод).

Подумайте о неправильном наборе номера телефона в Phonenombers:

$number = $user['Phonenombers'][0]['number'];  // Notice: Undefined index
$number = $user->PhoneNombers[0]->number;      // Notice: Undefined property

Или в случае неправильного ввода 'user' в 'userr':

$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_NOTICE или PHP_ERROR соответственно только при выполнении во время выполнения скрипта.Например, следующее NOT произведет PHP_NOTICE или PHP_ERROR:

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

Итак, наконец, ответ НЕТ, это не относится к PHP / Doctrine.Если вам не нужны какие-либо методы для объекта Doctrine_Collection, вы должны использовать вместо этого увлажнение массива, потому что он быстрее и использует меньше памяти.

...