教义记录的范围是什么?

时间:2018-07-25 19:12:09

标签: php doctrine

我正在调查一个错误,该错误看上去是在返回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的值进行更新。

我非常想知道为什么会这样,以及为什么这种行为是可取的。

0 个答案:

没有答案