有沒有簡單的方法從對象中刪除成員?不只是將其設置爲null,而是實際刪除它。從對象中移除成員?
謝謝! :)
編輯:我已經嘗試unset(),並將成員變量設置爲null顯然不起作用。我想我可以將對象轉換爲一個數組,然後刪除有問題的數組鍵,然後轉換回一個對象,但blech ...有一個更簡單的方法!
有沒有簡單的方法從對象中刪除成員?不只是將其設置爲null,而是實際刪除它。從對象中移除成員?
謝謝! :)
編輯:我已經嘗試unset(),並將成員變量設置爲null顯然不起作用。我想我可以將對象轉換爲一個數組,然後刪除有問題的數組鍵,然後轉換回一個對象,但blech ...有一個更簡單的方法!
您正在使用RedBean。剛剛檢查出來。而這些bean對象沒有實際的屬性。
unset($bean->field);
不行的,因爲->field
是虛擬屬性。它不存在於課堂上。相反,它駐留在您無法訪問的protected $bean->properties[]
中。 RedBean僅實現用於檢索和設置屬性的神奇方法__get
和__set
。
這就是爲什麼unset()
不起作用。它解除了在該位置從未存在的財產。
不,您也不能在Runkit模塊中找到完成該方法的方法,即使存在刪除methods/functions/constants的方法。
$obj = new stdClass;
$obj->answer = 42;
print_r($obj);
unset($obj->answer);
print_r($obj);
Works fine for me。你確定你做對了嗎?
更新:
It also works在類中定義的屬性:
class Foo {
public $bar = 42;
}
$obj = new Foo;
print_r($obj);
unset($obj->bar);
print_r($obj);
內你反對,你可以定義一個名爲__unset
class Test
{
public $data = array();
public function __unset($key)
{
unset($this->data[$key]);
}
}
魔術方法和Jon總結了其他很好的因素。
RedBean在bean上有一個removeProperty方法。
感謝您的評論!這應該對這個問題的新手有所幫助。我相信這在大約2011年初的RedBean中是不可用的(現在幾乎是三年後)。實際上,回到當天(正如你在上面我的2013年1月17日的評論中可以看到的那樣),我添加了一個magic setter來讓unset()直接用在bean本身上。 – rinogo 2014-03-12 14:48:22
您是否想僅僅因爲您的不想將其存儲在數據庫中而取消設置屬性?
如果是這樣,只需在該類中聲明該屬性爲private
即可。
TBH,四年前我問過這個問題,所以我不記得。無論如何,謝謝你的回答!也許它會幫助別人! :) – rinogo 2015-02-06 16:45:42
隨着紅豆4,您可以使用
unset($bean->someproperty);
我想你可能想看看通過反射提供了一些可能性。不是100%,但Reflection類提供了一些全面的功能。另外,好奇; *爲什麼*? – Dan 2011-03-19 00:23:37
你如何檢查它是否被刪除? isset?的var_dump? – NikiC 2011-03-19 00:24:05
我在持久層中使用RedBean;它爲Bean上的每個成員(一個對象)創建一個列。我使用的效用函數有一個剩餘的成員變量;而不是重寫效用函數,我寧願刪除有問題的成員變量。 – rinogo 2011-03-19 00:25:11