Php 条令记录的范围是什么?
我正在调查一个bug,在返回记录对象时,条令似乎不尊重变量作用域的概念Php 条令记录的范围是什么?,php,doctrine,Php,Doctrine,我正在调查一个bug,在返回记录对象时,条令似乎不尊重变量作用域的概念 <?php class Thing { var $variable; public function doStuff() { $thing1 = self::getById(1); echo($thing1->variable); $thing1->variable = "new value"; Thing::doSome
<?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
old value
使用水合物_数组
时不会发生奇怪行为。在创建$thing2
时,使用调试器似乎正在实际更新$thing1
的值
我非常想知道为什么会发生这种情况,为什么这种行为是可取的 你给自己制造了一个相当复杂的问题。您的示例代码不完整,但是,它不起任何作用。你能完成它,告诉我们你得到了什么输出,以及你期望的输出吗?我所要求的是对KIKOSoftware的不完整性表示抱歉。我很难思考如何创建更完整的回购协议,除了用轻量级应用程序和引导数据库脚本来构建回购协议。你能给我指出一些SQL数据库支持的问题的例子吗?让我这样说:我可以看到字符串
“新值”
来自哪里,但我不知道“旧值”
来自哪里?这是来自条令质疑吗?类的方法按什么顺序调用?提示:我认为这与数据库调用没有任何关系,因此当您将该调用替换为:return“value set in getById($id)”时,就可以完成您的示例代码>。
old value
old value