Удаление объектов, созданных addClassObject

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
CagoBHuK
Сообщения: 13
Зарегистрирован: Вс янв 29, 2017 12:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Удаление объектов, созданных addClassObject

Сообщение CagoBHuK » Пн мар 13, 2017 11:29 pm

Всем привет. Пытаюсь сделать автоматическое создание объектов для определенного набора данных. При этом если обработчик запускается повторно, то все ранее созданные таким образом объекты мне необходимо сначала удалить.

Код: Выделить всё

addClassObject($class, $objName);
Таким образом я создал объект. А вот каким образом мне объект $object удалить?
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Удаление объектов, созданных addClassObject

Сообщение Bagir » Вт мар 14, 2017 11:14 am

Никогда не задумывался об удалении объектов. создавать, да, например для регистрации нового WiFi устройства. Интересно для какой цели вам понадобилось удаление объектов? Может как то по другому можно решить задачу?
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
CagoBHuK
Сообщения: 13
Зарегистрирован: Вс янв 29, 2017 12:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Удаление объектов, созданных addClassObject

Сообщение CagoBHuK » Вт мар 14, 2017 8:38 pm

Bagir писал(а):Никогда не задумывался об удалении объектов. создавать, да, например для регистрации нового WiFi устройства. Интересно для какой цели вам понадобилось удаление объектов? Может как то по другому можно решить задачу?
У меня есть класс Port. Он имеет несколько наследников PortIn, PortOut и так далее. Класс-устройство, которому принадлежат эти Port, имеет механизм автонастройки своих портов. Допустим, на физическом устройстве я изменил тип порта с In на Out. Соответственно, тип наследника должен измениться с одного на другого. Механизма полиморфизма я не нашел, поэтому вижу решение только в удалении уже имеющегося порта и добавлении его заново с другим типом наследника.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Удаление объектов, созданных addClassObject

Сообщение Bagir » Вт мар 14, 2017 10:51 pm

Если я правильно понял, то у меня несколько похожая ситуация с объектами сети Z-Wave. Самый яркий пример это пульт и выключатели. У них есть совершенно другие свойства. Проще говоря, эти железки не такие как все остальные. Я долго думал как сделать всё это безобразие. Были мысли создать подклассы как в случае с классом keySensors, но всё же в случае с Z-Wave я просто объявляю в классе все возможные свойства и методы разнообразного железа.
Вероятно есть какой то предел, где побеждает решение создать подклассы, и вариант с объявлением несуществующих свойств.
Как итог, да, действительно удаление объектов может понадобится, если поставить задачу именно так, и в дальнейшем оперировать объектами классов. Но я бы попробовал решить задачу как то иначе без динамических объектов.
А как вы в дальнейшем работайте с этими созданными объектами портов? Лично я, из того что у меня есть, могу только сравнить с портами МегаД. При замене управляющего модуля можно, например, объявить порт выход как порт вход. И да, у него уже будут совсем другие свойства.
Просто при работе с этим устройством я в коде сильно привязываюсь к имени объекта. И я даже не представляю как бы это всё выглядело, если бы я заранее не знал имя этого объекта. То есть если бы имя было динамическое.
Трудно дальше рассуждать без полного понимания картины.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
CagoBHuK
Сообщения: 13
Зарегистрирован: Вс янв 29, 2017 12:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Удаление объектов, созданных addClassObject

Сообщение CagoBHuK » Вт мар 14, 2017 11:57 pm

Именно о портах MegaD и идет речь. У меня есть два базовых класса: Меги и ее порта. Соответственно, ее порт ветвится на различные типы портов. У базового порта есть свойства: номер, имя класса родительской Меги и тип порта (потребность в наличии последнего сомнительна). У класса Меги есть метод, который перечитывает конфигурацию объекта Меги (по свойству айпи + пароль) и пересоздает/обновляет конфигурацию портов. Алгоритм простой: по имени объекта Меги подбираются все порты и сверяются текущие настройки портов по номерам с теми, что пришли с Меги. Вот как раз в этот момент и появляется необходимость полиморфизма. Если тип порта изменился, то и наследный класс должен поменяться тоже. Если появился новый порт, то он допишется в объекты портов. Единственный способ, как я вижу, это - удаление, т.к. полиморфить уже созданные объекты возможности, как я понимаю, нет.

По поводу того, как же они работают дальше? Вот тут и возникает необходимость делить класс на подклассы, т.к. каждый тип порта ведет себя по-разному в разных ситуациях, например, при изменении своего статуса. Если порт IN должен выполнить все действия, которые при изменении статуса должны происходить (например, изменить статус объектам-портам OUT), то порт OUT должен вместо этого при изменении своего статуса направить команду на саму Мегу. Именно универсализация и заставила меня отойти от общего набора свойств и поделить классы портов на ветки. Программерская лень безгранична, и, описав поведение каждому классу, механизм будет работать сам по себе, один раз считав настройки с Меги. Новая Мега - это добавление объекта и нажатие на кнопку самонастрйки. При этом скрипт megad.php вообще состоит из 10 строчек кода. Если полетит, я выложу отдельными классами для заинтересованных.
Аватара пользователя
Bagir
Сообщения: 1615
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 212 раз
Поблагодарили: 375 раз

Re: Удаление объектов, созданных addClassObject

Сообщение Bagir » Ср мар 15, 2017 12:19 am

Дело становится интереснее. Просто МегаД это можно сказать основные руки и уши моей системы. Лень, да верно, она безгранична. Готов день писать код, чтобы потом выполнить задачу за пять минут, которая требует пары часов рутинной работы :)
Просто я пошел по другому пути работы с Мегой. Изначально всё базируется на объектах класса keySensors и Relays. Класс MegaD просто "линкует" эти классы с железом. Я не сильно дружу с паяльником, поэтому использую готовые блоки 7I7O. Поэтому назначение порта для меня заранее предопределено.
Windows 10, HTTP, MegaD, Z-Wave, 1-Wire, CONNECT
CagoBHuK
Сообщения: 13
Зарегистрирован: Вс янв 29, 2017 12:21 pm
Благодарил (а): 0
Поблагодарили: 1 раз

Re: Удаление объектов, созданных addClassObject

Сообщение CagoBHuK » Ср мар 15, 2017 7:57 pm

Короче, нашел только код удаления. Отдельной функции нет.

Код: Выделить всё

            $rec=SQLSelectOne("SELECT * FROM objects WHERE TITLE='$id'");
            // some action for related tables
            SQLExec("DELETE FROM history WHERE OBJECT_ID='".$rec['ID']."'");
            SQLExec("DELETE FROM methods WHERE OBJECT_ID='".$rec['ID']."'");
            SQLExec("DELETE FROM pvalues WHERE OBJECT_ID='".$rec['ID']."'");
            SQLExec("DELETE FROM properties WHERE OBJECT_ID='".$rec['ID']."'");
            SQLExec("DELETE FROM objects WHERE ID='".$rec['ID']."'");
 
За это сообщение автора CagoBHuK поблагодарил:
directman66 (Ср мар 22, 2017 11:45 am)
Рейтинг: 1.16%
directman66
Сообщения: 2800
Зарегистрирован: Пн дек 26, 2016 9:51 am
Откуда: Екатеринбург
Благодарил (а): 380 раз
Поблагодарили: 695 раз
Контактная информация:

Re: Удаление объектов, созданных addClassObject

Сообщение directman66 » Ср мар 22, 2017 11:47 am

Сергей, а может все же сделать готовую функцию? Люди просят )) или хотябы массовое удаление из редактора
Если вам помогло данное сообщение, не поленитесь нажать кнопку "спасибо".
CONNECT | Оборудование | Блог | Дополнения | Email | Telegram
Ответить