PHP数组对象集合问题
我有以下PHP代码:PHP数组对象集合问题,php,Php,我有以下PHP代码: class SQLStatements { public function __construct($iName) { $this->name = $iName; $this->sqlStatement = array (); } public function addStatement($iSQLStatement) { $this->sqlStatement [] = $iSQL
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
的旧对象冲突)请显示用于添加两个对象的完整代码(可能是循环?)。这就是答案。谢谢你,科林。