根据他们的documentation,你应该使用Array水合而不是在为只读目的检索数据时记录水合作用。
但是,这意味着我必须使用数组和字符串键访问检索到的对象的属性:
$user['Phonenumbers'][0]['number']
而不是OO风格:
$user->PhoneNumbers[0]->number
现在我对PHP有点新意,但在其他语言中我使用第二种表示法会更好,因为拼写错误会在编译时捕获,而字符串文字中的拼写错误在运行时才会被注意到。这适用于PHP / Doctrine吗?
答案 0 :(得分:0)
两种符号中的拼写错误都会在编译时被 NOT 捕获。两种符号中的拼写错误只会生成PHP_NOTICE
,并且应用程序将继续运行,除非您尝试执行某些非法操作(例如,调用未定义的方法)。
考虑将'Phonenumbers'误称为'Phonenombers':
$number = $user['Phonenombers'][0]['number']; // Notice: Undefined index
$number = $user->PhoneNombers[0]->number; // Notice: Undefined property
或者在'用户'错误输入'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
对象的任何方法,你应该使用数组水合作用,因为它更快并且使用更少的内存。