Помощь в php

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
IrisKo
Сообщения: 15
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 5 раз
Поблагодарили: 0

Помощь в php

Сообщение IrisKo » Сб авг 24, 2019 3:17 pm

Я не очень опытный программист если можно так сказать :) и поэтому возник вопрос каким образом организовать выполнение кода при смене одного свойства на другое. Например есть у меня робот пылесос который имеет свойство "mode" в которое записываются цифры в зависимости от того что он сейчас делает. Когда пылесосит свойство принимает значение "5", когда заряжается свойство принимает значение "8". Так вот хотелось бы как то прописать в коде следующее:
Если свойство меняется с 5 на 8 то сообщить "уборка закончена", если свойство меняется с 8 на 5 то сообщить "началась уборка"...и так далее.
Или например еще вариант использования для юзеров и свойства "расстояние от дома". Если значение свойства уменьшается, то юзер приближается к дому и запускаются определенные сценарии - включается кондиционер, чайник, музыка и феерверки :), а если значение свойства увеличивается то юзер уезжает и все выключается...
Вариантов применения много но вот не знаю как прописать в php именно изменение конкретных значении свойства в течении времени. Или например провести сравнение предыдущего значения свойства с текущим, какой командой?
fandaymon
Сообщения: 770
Зарегистрирован: Сб янв 13, 2018 5:00 pm
Благодарил (а): 26 раз
Поблагодарили: 337 раз

Re: Помощь в php

Сообщение fandaymon » Сб авг 24, 2019 3:59 pm

php тут в принципе не при чём. Первая задача решается при помощи метода связанного с изменением свойства. Объект пылесос со свойством mode принадлежит к какому-то классу объектов, ну например класс называется Пылесосы. В меню Объекты находим это класс, выбираем редактировать, выбираем вкладку - Методы, добавляем метод, например ModeChanged и вписываем в этом метод примерно такой код

if ($params['OLD_VALUE']==5 and $params['NEW_VALUE']==8) {
say('Уборка закончена');
}

if ($params['OLD_VALUE']==8 and $params['NEW_VALUE']==5) {
say('Уборка началась');
}

Сохраняем.
Далее выбираем вкладку Свойства
выбираем редактировать наше свойство Mode и в комбобоксе Запускать метод при изменении - выбрать наш новый метод - ModeChanged. Сохранить. Ну и в принципе всё.

Теперь когда у нашего объекта Пылесос меняется свойство Mode, то будет вызываться метод ModeChanged c параметрами OLD_VALUE, где будет хранится наше старое значение свойства и NEW_VALUE, где будет хранится новое значение.

Более того - сообщения будут выдаваться и если добавить ещё какой-нибудь объект Пылесос 1, принадлежащий к классу Пылесосы.

Если нам нужны разные реакции для разных пылесосов, то можно зайти в методы нашего объекта и теперь там появился метод ModeChanged - в его настройках можно вписать какой-то другой код и выбрать - выполнять ли родительский код (тот код который мы записали для класса)
За это сообщение автора fandaymon поблагодарил:
IrisKo (Сб авг 24, 2019 5:21 pm)
Рейтинг: 1.27%
IrisKo
Сообщения: 15
Зарегистрирован: Пт фев 15, 2019 12:19 pm
Благодарил (а): 5 раз
Поблагодарили: 0

Re: Помощь в php

Сообщение IrisKo » Сб авг 24, 2019 5:21 pm

О спасибо огромное. Я как раз не знала что есть такая фишка как $params['OLD_VALUE'] и $params['NEW_VALUE']. О том что можно запускать метод при изменении свойства была вкурсе, а вот про то что можно выхватить как то значение свойства которое было и которое стало не знала :)
Logrus
Сообщения: 1391
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 252 раза
Поблагодарили: 240 раз

Re: Помощь в php

Сообщение Logrus » Сб авг 24, 2019 5:32 pm

а параметры очень полезны, для попробовать

//$params['ORIGINAL_OBJECT_TITLE'] //имя объекта
//$params['PROPERTY'] //имя свойства вызвавшего по изменению метод (к примеру темп контроль может вызываться изменением температуры, уставок - оные можно и динамически менять, режимов работы, а в методе это обрабатывать)
//$params['SOURCE'] //4-й параметр в сетглобал или сейчас юрл кто вызвал и с какими параметрами
//$params['OLD_VALUE']
//$params['NEW_VALUE']

//DebMes(json_encode($this));
//DebMes(json_encode($params));

//DebMes(gr('NEW_VALUE')); //или любой
За это сообщение автора Logrus поблагодарили (всего 5):
Chainik (Сб авг 24, 2019 5:43 pm) • IrisKo (Пт авг 30, 2019 11:32 am) • 2007-i (Вс сен 01, 2019 12:31 am) • ImHuman (Вт сен 10, 2019 5:58 pm) • Mavric (Ср сен 18, 2019 8:09 pm)
Рейтинг: 6.33%
Мой CONNECT | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо - ТАМ =>
Ответить