web-dev-qa-db-ja.com

オブジェクトからメンバーを削除しますか?

オブジェクトからメンバーを削除する簡単な方法はありますか? nullに設定するだけでなく、実際に削除します。

ありがとう! :)

編集:私はすでにunset()を試しましたが、メンバー変数をnullに設定しても明らかに機能しません。オブジェクトを配列に変換してから、問題の配列キーを削除して、オブジェクトに戻すことができると思いますが、問題があります...もっと簡単な方法が必要です。

13
rinogo

RedBeanを使用しています。ちょうどそれをチェックアウトしました。そして、これらのBeanオブジェクトには実際のプロパティがありません。

_unset($bean->field);
_

_->field_は仮想属性であるため、機能しません。クラスには存在しません。むしろ、アクセスできない_protected $bean->properties[]_にあります。 RedBeanは、属性を取得および設定するためのマジックメソッド___get_および___set_のみを実装します。

これが、unset()が機能しない理由です。その場所に存在しなかったプロパティの設定を解除します。

16
mario
$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);
10
Jon

オブジェクト内で、__unsetという魔法のメソッドを定義できます。

class Test
{
    public $data = array();

    public function __unset($key)
    {
        unset($this->data[$key]);
    }
}

そしてジョンは他の要素をうまくまとめました。

4
RobertPitt

RedBeanには、BeanのremovePropertyメソッドがあります。

3
user3410818

RedBean 4を使用すると、

unset($bean->someproperty);
1
m13r

おそらく nset()

1
Prisoner

データベースに保存したくないという理由だけでプロパティの設定を解除しますか?

その場合は、クラスでプロパティをprivateとして宣言するだけです。

この答えへの称賛: php-redbeanのプロパティをデータベースに保存しない

0