Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组对象集合问题_Php - Fatal编程技术网

PHP数组对象集合问题

PHP数组对象集合问题,php,Php,我有以下PHP代码: class SQLStatements { public function __construct($iName) { $this->name = $iName; $this->sqlStatement = array (); } public function addStatement($iSQLStatement) { $this->sqlStatement [] = $iSQL

我有以下PHP代码:

class SQLStatements {
    public function __construct($iName) {
        $this->name = $iName;
        $this->sqlStatement = array ();
    }

    public function addStatement($iSQLStatement) {
        $this->sqlStatement [] = $iSQLStatement;
    }

...other functions...
}

print_r ($ss);
$sqlStatements->addStatement ( $ss );   
print_r ($sqlStatements);
输出为:

SQLStatement Object ( [id] => 300 [timestamp] => 201301090222 [fixture] => Home v Away [outcome] => Home [fixtureDateTime] => 2013-01-11 [bookmakerOdds] => Array ( [0] => 2.15 [1] => 2.22 [2] => 2.05 [3] => 2.05 [4] => 2.15 [5] => 2.20 [6] => 2.14 ) ) SQLStatements Object ( [name] => TheStatement [sqlStatement] => Array ( [0] => SQLStatement Object ( [id] => 300 [timestamp] => 201301090222 [fixture] => Home v Away [outcome] => Home [fixtureDateTime] => 2013-01-11 [bookmakerOdds] => Array ( [0] => 2.15 [1] => 2.22 [2] => 2.05 [3] => 2.05 [4] => 2.15 [5] => 2.20 [6] => 2.14 ) ) ) ) SQLStatement Object ( [id] => 300 [timestamp] => 201301090222 [fixture] => Home v Away [outcome] => Home v Away - Draw [fixtureDateTime] => 2013-01-11 [bookmakerOdds] => Array ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) SQLStatements Object ( [name] => TheStatement [sqlStatement] => Array ( [0] => SQLStatement Object ( [id] => 300 [timestamp] => 201301090222 [fixture] => Home v Away [outcome] => Home v Away - Draw [fixtureDateTime] => 2013-01-11 [bookmakerOdds] => Array ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) [1] => SQLStatement Object ( [id] => 300 [timestamp] => 201301090222 [fixture] => Home v Away [outcome] => Home v Away - Draw [fixtureDateTime] => 2013-01-11 [bookmakerOdds] => Array ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) ) ) SQLStatement对象 ( [id]=>300 [时间戳]=>201301090222 [固定装置]=>主场v客场 [结果]=>主页 [fixtureDateTime]=>2013-01-11 [BookMakerRods]=>数组 ( [0] => 2.15 [1] => 2.22 [2] => 2.05 [3] => 2.05 [4] => 2.15 [5] => 2.20 [6] => 2.14 ) ) SQLStatements对象 ( [名称]=>声明 [sqlStatement]=>数组 ( [0]=>SQLStatement对象 ( [id]=>300 [时间戳]=>201301090222 [固定装置]=>主场v客场 [结果]=>主页 [fixtureDateTime]=>2013-01-11 [BookMakerRods]=>数组 ( [0] => 2.15 [1] => 2.22 [2] => 2.05 [3] => 2.05 [4] => 2.15 [5] => 2.20 [6] => 2.14 ) ) ) ) SQLStatement对象 ( [id]=>300 [时间戳]=>201301090222 [固定装置]=>主场v客场 [结果]=>主客场-平局 [fixtureDateTime]=>2013-01-11 [BookMakerRods]=>数组 ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) SQLStatements对象 ( [名称]=>声明 [sqlStatement]=>数组 ( [0]=>SQLStatement对象 ( [id]=>300 [时间戳]=>201301090222 [固定装置]=>主场v客场 [结果]=>主客场-平局 [fixtureDateTime]=>2013-01-11 [BookMakerRods]=>数组 ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) [1] =>SQLStatement对象 ( [id]=>300 [时间戳]=>201301090222 [固定装置]=>主场v客场 [结果]=>主客场-平局 [fixtureDateTime]=>2013-01-11 [BookMakerRods]=>数组 ( [0] => 3.50 [1] => 3.50 [2] => 3.40 [3] => 3.40 [4] => 3.30 [5] => 3.50 [6] => 3.28 ) ) ) )
$ss
SQLStatement
对象,而
SQLStatements
对象是
SQLStatement
对象的集合。但是,从输出中可以看到,SQLStatements->SQLStatement[0]和SQLStatements->SQLStatement[1]是相同的。我希望SQLStatements->SQLStatement[0]->结果是“Home”,而不是“Home v Away-Draw”。我做错了什么?

当一个对象被传递给PHP中的一个方法时,PHP实际上会在内存中传递该对象地址的值。这意味着,当您调用
addStatement($ss)
时,您并没有将
$ss
对象的副本添加到statements数组中,而是在内存中添加指向该对象的指针。如果以后更改
$ss
对象,它也将在SQLStatements类中的数组中更改(因为它们指向内存中的同一对象)


您应该做的是,在调用
addStatement($ss)
之后,您应该执行如下操作:
$ss=new SQLStatement()
,然后可以进行更改并再次添加它(通过创建
新SQLStatement())
您已为此新对象分配了另一个内存块,并且该位置有一个新的内存地址,该地址不会与分配给
$ss
的旧对象冲突)

请显示用于添加两个对象的完整代码(可能是循环?)。这就是答案。谢谢你,科林。