Как сбросить унаследованные свойства объекта? - PullRequest
1 голос
/ 08 апреля 2010

У меня есть объект

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

    )

Очевидно, что Object унаследовал свойства 'db' и 'result' родительского класса Database.

unset ($ object-> result), ни unset ($ object-> result: Database), ни unset ($ object-> result: Database: private) работают.

Как я могу отменить эти свойства, когда они больше не нужны (т.е. когда свойства объекта должны быть выведены)?

Является ли вообще хорошей идеей иметь объект базы данных в качестве унаследованного свойства других классов (расширить один класс базы данных всеми другими классами, которые используют соединения с базой данных)?

Ответы [ 2 ]

1 голос
/ 08 апреля 2010

Если вы используете unset () только в одном объекте, вы не отменяете сброс этого объекта, потому что он где-то существует в памяти, а то, что у вас есть в вашем объекте, является просто ссылкой. Эта же ссылка используется всеми другими объектами, содержащими этот объект БД. Единственное, что вы можете сделать, это установить для этой ссылки значение NULL, но вы не освобождаете память, поскольку БД все еще используется другими объектами.

Как правило, я не буду беспокоиться об отмене сброса объекта БД, поскольку вы не получите никакого повышения производительности. PHP будет автоматически собирать свои объекты по окончании выполнения.

Да, рекомендуется иметь один статический объект БД или наследовать его в ваших классах, которые используют базу данных.

1 голос
/ 08 апреля 2010

Попробуйте $object->result = null

Является ли вообще хорошей идеей иметь объект базы данных в качестве унаследованного свойства других классов (расширить один класс базы данных всеми другими классами, использующими соединения с базой данных)?

Нет. Лучше всего, чтобы у вашего класса была одна ответственность. Держите ваши соединения с базой данных в классе или наборе классов, в обязанности которых входит чтение и запись данных из базы данных. Другие ваши доменные объекты должны выполнять свои собственные обязанности, не перегруженные SQL и кодом базы данных, даже если они наследуются.

Возможно, вы также захотите прочитать концепцию «отдавайте предпочтение композиции наследованию».

...