跟踪令人困惑的PHP问题(可能是_set/_get magic?)

跟踪令人困惑的PHP问题(可能是_set/_get magic?),php,autoload,magic-methods,Php,Autoload,Magic Methods,我正在用Prope做各种各样的事情,这可能有点边缘化——特别是我发现与表名关联的类名被缓存在某个地方,由于我用不同的类名重建了一个模型,但表名相同(出于单元测试目的),Prope陷入了一个正确的困境(对于这个问题,您不需要有推进经验;只需要了解PHP,特别是魔法调用即可) 为了调试这个问题,我发现在设置列值时,spreep会为一个表填充一个“tablemap”类。我的目的是找出这个填充在代码中的什么地方发生,这样我就可以清除spreep中缓存的tablemap 具体来说,类TestOrganiz

我正在用Prope做各种各样的事情,这可能有点边缘化——特别是我发现与表名关联的类名被缓存在某个地方,由于我用不同的类名重建了一个模型,但表名相同(出于单元测试目的),Prope陷入了一个正确的困境(对于这个问题,您不需要有推进经验;只需要了解PHP,特别是魔法调用即可)

为了调试这个问题,我发现在设置列值时,spreep会为一个表填充一个“tablemap”类。我的目的是找出这个填充在代码中的什么地方发生,这样我就可以清除spreep中缓存的tablemap

具体来说,类TestOrganizer有一个生成的父BaseTestOrganizer,它有一个列设置器方法,因此:

// The ** lines are mine, the rest are auto-generated by propel.
// The output when setting a value and saving is "no yes " which
// shows that the '$this->modifiedColumns[]' line triggers the
// tablemap population
public function setName($v)
{
    if ($v !== null) {
        $v = (string) $v;
    }

    if ($this->name !== $v) {
        $this->name = $v;

        $map = Propel::getDatabaseMap('test'); // **
        echo $map->getTables() ? 'yes ' : 'no '; // **
        $this->modifiedColumns[] = TestOrganiserPeer::NAME;
        echo $map->getTables() ? 'yes ' : 'no '; // **
    }

    return $this;
} // setName()
根据注释,$map->getTables()的值由于
$this->modifiedColumns[]=testOrganizerPeer::NAME
行而从空变为非空。然而,在这个类或它的子类或父类中没有_set()方法,所以我很困惑这里会触发什么代码


有什么想法吗?

D'oh!事后看来,这很明显

我在一行中添加了print
debug\u backtrace()
,并找到了触发tablemap填充的代码。这最终表明使用
TestOrganizerPeer
会触发Prope的自动加载程序,当加载对等类时,这反过来会导致立即调用
BaseTestOrganizerPeer::buildTableMap()