我正在调查一个错误,该错误看上去是在返回Record对象时,Doctrine不尊重变量范围的想法。
<?php
class Thing {
var $variable;
public function doStuff() {
$thing1 = self::getById(1);
echo($thing1->variable);
$thing1->variable = "new value";
Thing::doSomeOtherStuff();
echo($thing1->variable);
}
public static function doSomeOtherStuff() {
$thing2 = Thing::getById(1);
}
/**
* this runs a query against a database and
* returns a Thing object with $variable = "old value"
*/
public static function getById($id): Thing {
return Doctrine_Query::CREATE()
->select('t.*')
->from('Thing t')
->where('t.id = ?', $id)
->fetchOne([], Doctrine_Core::HYDRATE_RECORD);
}
}
预期输出:
old value
new value
实际输出:
old value
old value
使用HYDRATE_ARRAY
时不会发生奇怪的行为。使用调试器,看起来this method在创建$thing1
时实际上正在对$thing2
的值进行更新。
我非常想知道为什么会这样,以及为什么这种行为是可取的。