我是OOP的新手,似乎陷入了一些我很確定很簡單的事情,但我不明白髮生了什麼。爲什麼這個PHP對象將項目附加到自身上?
下面的示例代碼:
class add_some {
static $arr = array('a', 'b');
static $new_arr = array();
public static function iterate() {
foreach (self::$arr as $v) {
self::$new_arr[] = $v;
}
}
}
for ($i=0; $i < 3; $i++) {
// instantiate the object
$add_some = new add_some;
// launch the method that copies items from $arr to $new_arr
$add_some::iterate();
echo '<pre>';
print_r($add_some::$new_arr);
echo "</pre>";
unset($add_some);
}
經過一個循環,並增加其在該項目$ ARR到$ new_arr,它基本上覆制從$所有項目ARR至$ new_arr
代碼實例化一個新對象並執行iterate()方法,該方法將項目從$ arr複製到$ new_arr 3次。
每次迭代都會創建一個新對象$ add_some = new add_some;所以每次迭代應該只是生產:
Array
(
[0] => a
[1] => b
Array
(
[0] => a
[1] => b
)
Array
(
[0] => a
[1] => b
)
但由於某些原因的對象保持在每次迭代增長....我不知道爲什麼 ..我試圖銷燬對象(未設置)和不知道我是否應該做其他事情。
Array
(
[0] => a
[1] => b
)
Array
(
[0] => a
[1] => b
[2] => a
[3] => b
)
Array
(
[0] => a
[1] => b
[2] => a
[3] => b
[4] => a
[5] => b
)
+1到一定程度上抵消了downvotes,問題是沒有那麼糟它不配他們。這個問題已經清楚地說明過了,對於OOP的新手來說,這個問題並不是不合理的。 – Oleg
謝謝,我對downvotes有點困惑,我在OOP上做了2門課程,雖然他們是初學者課程,但是即使在對象被銷燬之後,也沒有提到在內存中維護的靜態屬性。這個問題可能對其他新手有幫助。 –