0

我正在尝试创建一个我将使用链接的对象数组,我遇到了一个问题,我希望我能得到帮助。这是我的代码:

$sql = new sql();
$sqlList[] = $sql->setTable('TableTest1');
$sqlList[] = $sql->setTable('TableTest2');
$sqlList[] = $sql->setTable('TableTest3');
$testDB->delete($sqlList);

sql 类包含一个名为 table 的私有变量,它具有如下的 setter 和 getter 方法:

public function setTable($setTable)
{
    $this->table = $setTable;
    return $this;
}

public function getTable()
{
    return $this->table;
}

为了测试这一点,我在 $testDB 对象中有一个简单的删除方法,如下所示:

public function delete($sql ,$setClear = true)
{
    echo "<pre>";
    print_r($sql);
    echo "</pre>";
}

我希望返回一个数组,其中的元素包含三个不同的 TableTest 值,但所有三个都只包含“TableTest3”的最后一个条目,如下所示:

Array
(
[0] => sql Object
    (
        [table:sql:private] => TableTest3
    )

[1] => sql Object
    (
        [table:sql:private] => TableTest3
    )

[2] => sql Object
    (
        [table:sql:private] => TableTest3
    )
)

我正在使用 PHP 5.4.7。我究竟做错了什么?一个比我有更多经验的程序员建议这种方法能够进行一系列不同的设置来逐步完成,我正在尝试这个来测试我的代码。在我看来,它是在数组的每个条目中引用对象 $sql 而不是我想要的实际对象的副本。

4

2 回答 2

1

您只有“一个”对象,在您创建时创建

$sql = new sql();

而且您刚刚更改了私有 $table 变量 3 次。您需要三个 $sql 对象,每个对象都设置为自己的表。如同:

$sql = new sql();
$sqlList[] = $sql->setTable('TableTest1');
$sql = new sql();
$sqlList[] = $sql->setTable('TableTest2');
$sql = new sql();
$sqlList[] = $sql->setTable('TableTest3');
$testDB->delete($sqlList);
于 2013-02-05T03:41:37.847 回答
0

用你的setTable方法看起来像这样:

public function setTable($setTable)
{
    $this->table = $setTable;
    return $this;
}

$sqlList[] = $sql->setTable('TableTest1');
$sqlList[] = $sql->setTable('TableTest2');
$sqlList[] = $sql->setTable('TableTest3');

中的所有三个“元素”$sqlList都只是$sql.

如果你想在 上创建一个新实例setTable,你可以尝试这样的事情:

public function setTable($setTable)
{
    $class=__CLASS__;
    $obj=new $class;
    $obj->table=$setTable;
    return $obj;
}
于 2013-02-05T03:43:02.243 回答