オブジェクトからメンバーを削除する簡単な方法はありますか? nullに設定するだけでなく、実際に削除します。
ありがとう! :)
編集:私はすでにunset()を試しましたが、メンバー変数をnullに設定しても明らかに機能しません。オブジェクトを配列に変換してから、問題の配列キーを削除して、オブジェクトに戻すことができると思いますが、問題があります...もっと簡単な方法が必要です。
RedBeanを使用しています。ちょうどそれをチェックアウトしました。そして、これらのBeanオブジェクトには実際のプロパティがありません。
_unset($bean->field);
_
_->field
_は仮想属性であるため、機能しません。クラスには存在しません。むしろ、アクセスできない_protected $bean->properties[]
_にあります。 RedBeanは、属性を取得および設定するためのマジックメソッド___get
_および___set
_のみを実装します。
これが、unset()
が機能しない理由です。その場所に存在しなかったプロパティの設定を解除します。
$obj = new stdClass;
$obj->answer = 42;
print_r($obj);
unset($obj->answer);
print_r($obj);
私にとっては問題なく動作します 。あなたはそれを正しくやっていると確信していますか?
更新:
これも機能します クラスで定義されたプロパティの場合:
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]);
}
}
そしてジョンは他の要素をうまくまとめました。
RedBeanには、BeanのremovePropertyメソッドがあります。
RedBean 4を使用すると、
unset($bean->someproperty);
おそらく nset() 。
データベースに保存したくないという理由だけでプロパティの設定を解除しますか?
その場合は、クラスでプロパティをprivate
として宣言するだけです。
この答えへの称賛: php-redbeanのプロパティをデータベースに保存しない