如何取消设置对象的继承属性?

时间:2010-04-08 14:14:17

标签: php inheritance parent unset

我有一个对象

    (
        [id] => 1
        [parent_id] => 0
        [result:Database:private] => 
        [db:Database:private] => mysqli Object
            (
                [affected_rows] => 0
                ...
            )

    )

显然,Object继承了父Database类的'db'和'result'属性。

取消设置($ object->结果)或取消设置($ object->结果:数据库),也取消设置($ object->结果:数据库:私有)工作。

如果不再需要这些属性(即将要输出对象属性时),我怎么能取消这些属性呢?

将数据库对象作为其他类的继承属性(使用所有其他使用数据库连接的类扩展一个Database类)通常是个好主意吗?

2 个答案:

答案 0 :(得分:1)

尝试$object->result = null

  

将数据库对象作为其他类的继承属性(使用所有其他使用数据库连接的类扩展一个Database类)通常是个好主意吗?

没有。你的班级最好有一个责任。将数据库连接保存在一个类或一组类中,这些类的职责是从数据库读取和写入数据。您的其他域对象应该处理自己的职责,而不会被SQL和数据库代码挤占 - 即使它是继承的。

您可能还想阅读“赞成合成而不是继承”的概念。

答案 1 :(得分:1)

如果您只在一个对象中使用unset(),则不会取消设置该对象,因为它存在于某个内存中,而您在对象中所拥有的只是一个引用。持有此DB对象的所有其他对象使用相同的引用。你唯一能做的就是将这个引用设置为等于NULL,但是你没有释放任何内存,因为DB仍然被其他对象使用。

通常我不会担心取消设置DB对象,因为你不会获得任何性能提升。 PHP将在执行结束时自动垃圾收集其对象。

是的,拥有一个静态数据库对象或在使用数据库的类中继承它是个好主意。