我有一个对象
(
[id] => 1
[parent_id] => 0
[result:Database:private] =>
[db:Database:private] => mysqli Object
(
[affected_rows] => 0
...
)
)
显然,Object继承了父Database类的'db'和'result'属性。
取消设置($ object->结果)或取消设置($ object->结果:数据库),也取消设置($ object->结果:数据库:私有)工作。
如果不再需要这些属性(即将要输出对象属性时),我怎么能取消这些属性呢?
将数据库对象作为其他类的继承属性(使用所有其他使用数据库连接的类扩展一个Database类)通常是个好主意吗?
答案 0 :(得分:1)
尝试$object->result = null
将数据库对象作为其他类的继承属性(使用所有其他使用数据库连接的类扩展一个Database类)通常是个好主意吗?
没有。你的班级最好有一个责任。将数据库连接保存在一个类或一组类中,这些类的职责是从数据库读取和写入数据。您的其他域对象应该处理自己的职责,而不会被SQL和数据库代码挤占 - 即使它是继承的。
您可能还想阅读“赞成合成而不是继承”的概念。
答案 1 :(得分:1)
如果您只在一个对象中使用unset(),则不会取消设置该对象,因为它存在于某个内存中,而您在对象中所拥有的只是一个引用。持有此DB对象的所有其他对象使用相同的引用。你唯一能做的就是将这个引用设置为等于NULL,但是你没有释放任何内存,因为DB仍然被其他对象使用。
通常我不会担心取消设置DB对象,因为你不会获得任何性能提升。 PHP将在执行结束时自动垃圾收集其对象。
是的,拥有一个静态数据库对象或在使用数据库的类中继承它是个好主意。