1

我有一个对象

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

    )

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

unset($object->result) 也没有 unset($object->result:Database) 也没有 unset($object->result:Database:private) 工作。

当不再需要这些属性时(即即将输出对象属性时),如何取消设置这些属性?

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

4

2 回答 2

1

尝试$object->result = null

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

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

您可能还想阅读“偏好组合优于继承”的概念。

于 2010-04-08T14:20:25.127 回答
1

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

一般来说,我不会担心取消设置 DB 对象,因为您不会获得任何性能提升。PHP 将在执行结束时自动对它的对象进行垃圾收集。

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

于 2010-04-08T14:20:48.247 回答