我在PHP中有一個類型爲MyObject
的對象。PHP將所有對象屬性複製到此
$myObject instanceof MyObject
現在,在class MyObject
,有一個非靜態函數,並在那裏,我用所提到的「我」,像$this
,但我也有另一個對象那裏。
是否有可能,而不是做$this = $myObject
,實現或多或少相同的效果,如類似set_object_vars($this, get_object_vars($myObject))
?
我在PHP中有一個類型爲MyObject
的對象。PHP將所有對象屬性複製到此
$myObject instanceof MyObject
現在,在class MyObject
,有一個非靜態函數,並在那裏,我用所提到的「我」,像$this
,但我也有另一個對象那裏。
是否有可能,而不是做$this = $myObject
,實現或多或少相同的效果,如類似set_object_vars($this, get_object_vars($myObject))
?
<?php
class MyObject
{
public function import(MyObject $object)
{
foreach (get_object_vars($object) as $key => $value) {
$this->$key = $value;
}
}
}
會做你想要我猜,但你應該注意以下事項:
get_object_vars
只能找到非靜態特性get_object_vars
只能找到可訪問屬性根據範圍根據範圍的部分是相當重要的,可能值得多一點解釋。你知道在PHP中屬性範圍是類依賴於而不是實例依賴嗎?
這意味着在上面的示例中,如果MyObject
中有private $bar
屬性,則get_object_vars
會看到它,因爲您處於MyObject
類的實例中。如果您嘗試導入另一個類的實例,這顯然不起作用。
謝謝!沒想到如果!現在,我只需要將屬性複製到實例,靜態屬性是無關緊要的^^ – arik 2012-01-03 14:58:32
@Geoffrey巴切萊特我們可以改善這一點:
class MyObject
{
//object or array as parameter
public function import($object)
{
$vars=is_object($object)?get_object_vars($object):$object;
if(!is_array($vars)) throw Exception('no props to import into the object!');
foreach ($vars as $key => $value) {
$this->$key = $value;
}
}
}
這裏的區別是,你可以通過一個普通的數組(哈希表)以及一個對象。想一想關於來自數據庫的一些數據的例子。
你是什麼意思「*使用'me'的引用,像'$ this' *」,你是否在方法中用'$ this'別名? – Dan 2012-01-03 13:13:55
你如何發佈代碼? – 2012-01-03 13:14:32
我認爲你的問題需要一點點評論。即使我們有一個set_object_vars()函數,那會是真正的效果嗎?您將複製對象,而不是引用它。有關更多信息,請參閱PHP中的複製和引用。 – Slavic 2012-01-03 13:14:38