0

チェーンを使用するオブジェクトの配列を作成しようとしていますが、助けを求めて問題が発生しています。ここに私が持っているコードがあります:

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

SQLクラスには、次のようなsetterメソッドとgetterメソッドを持つtableというプライベート変数が含まれています。

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>";
}

3 つの異なる TableTest 値を含む要素を持つ配列を返すことを望んでいますが、代わりに 3 つすべてに次のように「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

あなたがしたときに作成された「1つの」オブジェクトしかありません

$sql = new sql();

そして、プライベート $table 変数を 3 回変更しました。それぞれが独自のテーブルに設定された 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');

の 3 つの「要素」は$sqlListすべて$sql.

に新しいインスタンスを作成したい場合はsetTable、次のように試すことができます。

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