Имя объекта как свойство класса
Модератор: immortal
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Имя объекта как свойство класса
Добрый день!
Возможно вопрос уже поднимался, или это аксиома для опытных программистов, но я не нашел, а опыта нет чтобы разобраться самому.
Можно ли как-то при вызове метода объекта имя этого объекта брать из свойств текущего объекта?
Возможно вопрос уже поднимался, или это аксиома для опытных программистов, но я не нашел, а опыта нет чтобы разобраться самому.
Можно ли как-то при вызове метода объекта имя этого объекта брать из свойств текущего объекта?
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Имя объекта как свойство класса
Имеется ввиду $this->object_title ?
Или я не правильно понял?
Или я не правильно понял?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Имя объекта как свойство класса
Нет, интересует другое, вот приведу для примера:
Есть у меня классы:
- "Bridge", в котором объекты - устройства "1wire to ethernet" авторства ТНК с ab-log.ru (свойства - IP, пароль, методы для изменение уставки термостата в устройстве, получения температуры 1wire датчиков, включения/выключения выходов, контроля входов.
- "Thermostat", объекты которого будут хранить параметры термостатов, хранить текущие значения температур, контролировать разбег между уставкой и текущей температурой (чтобы генерировать предупреждения) - и соответственно в методах этого класса будем работать с объектами класса "Bridge".
- "WeekThermostat" - в нём будут храниться объекты - недельные термостаты, временные интервалы, значения в этих интервалах, статусы (включен-выключен тот или иной НедельныйТермостат), соответственно эти методы будут работать с объектами из класса "Thermostat".
Вот сейчас я делаю так, для изменения уставки аппаратного термостата "Bridge1" в методе объекта "Thermostat1" пишу:
callMethod('Bridge1.SetThermostat',array('port'=>1,'value'=>"21.5"));
А хотелось бы, чтобы я указал в свойстве "BridgeName" объекта "Thermostat1" значение "Bridge1", а метод записал бы в методы класса, вроде этого:
callMethod('%BridgeName%.SetThermostat',array('port'=>1,'value'=>"21.5"));
И не пришлось бы редактировать метод каждого объекта, а просто указывать в свойствах имя нужного объекта.
Есть у меня классы:
- "Bridge", в котором объекты - устройства "1wire to ethernet" авторства ТНК с ab-log.ru (свойства - IP, пароль, методы для изменение уставки термостата в устройстве, получения температуры 1wire датчиков, включения/выключения выходов, контроля входов.
- "Thermostat", объекты которого будут хранить параметры термостатов, хранить текущие значения температур, контролировать разбег между уставкой и текущей температурой (чтобы генерировать предупреждения) - и соответственно в методах этого класса будем работать с объектами класса "Bridge".
- "WeekThermostat" - в нём будут храниться объекты - недельные термостаты, временные интервалы, значения в этих интервалах, статусы (включен-выключен тот или иной НедельныйТермостат), соответственно эти методы будут работать с объектами из класса "Thermostat".
Вот сейчас я делаю так, для изменения уставки аппаратного термостата "Bridge1" в методе объекта "Thermostat1" пишу:
callMethod('Bridge1.SetThermostat',array('port'=>1,'value'=>"21.5"));
А хотелось бы, чтобы я указал в свойстве "BridgeName" объекта "Thermostat1" значение "Bridge1", а метод записал бы в методы класса, вроде этого:
callMethod('%BridgeName%.SetThermostat',array('port'=>1,'value'=>"21.5"));
И не пришлось бы редактировать метод каждого объекта, а просто указывать в свойствах имя нужного объекта.
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Имя объекта как свойство класса
Так можно для класса "Thermostat" ввести свойство "LinkedBridge". Соответственно в каждом объекте указать соответствующий бридж.
А дальше в методе класса пишем:
Мы не сам объект, а его имя храним в свойстве. Мне этого хватает что бы объекты класса MegaDRelays с классом MegaD связывать указывая какую именно мегу и порт использовать.
Единственное НО: нет проверки на опечатку в имени.
А дальше в методе класса пишем:
Код: Выделить всё
$LinkedBridge= $this->getProperty('LinkedBridge');
if($LinkedBridge) {
callMethod($LinkedBridge.'.SetThermostat',array('port'=>1,'value'=>"21.5"));
};
Единственное НО: нет проверки на опечатку в имени.
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Имя объекта как свойство класса
Вот!
Это то, что нужно, спасибо!
Да, я и с MegaD тоже собрался это применять - именно для связи с Relays.
Просто в пример привел то, чем занимался в данный момент - упорядочиванием и "станартизацией" термостатов.
И ещё вопрос - для чего в вашем примере проверка условия?
разве нельзя сделать так:
P.S. я только учусь в этом языке, раньше только с Си дело имел. потому логику этого языка постигаю с трудом
Это то, что нужно, спасибо!
Да, я и с MegaD тоже собрался это применять - именно для связи с Relays.
Просто в пример привел то, чем занимался в данный момент - упорядочиванием и "станартизацией" термостатов.
Вот это я уже сделал, нехватало как-раз того, что вы дальше описалиzelevova писал(а):Так можно для класса "Thermostat" ввести свойство "LinkedBridge". Соответственно в каждом объекте указать соответствующий бридж.
И ещё вопрос - для чего в вашем примере проверка условия?
разве нельзя сделать так:
Код: Выделить всё
$LinkedBridge= $this->getProperty('LinkedBridge');
callMethod($LinkedBridge.'.SetThermostat',array('port'=>1,'value'=>"21.5"));
-
- Сообщения: 291
- Зарегистрирован: Вт ноя 18, 2014 11:43 pm
- Откуда: Краснодарский край
- Благодарил (а): 32 раза
- Поблагодарили: 68 раз
Re: Имя объекта как свойство класса
Условие для проверки указан ли слинкованный бридж. Если имя не заданно то и метод не вызовется. Можно как ты указал. Можно вообще получение реквизиты в вызов самого метода запихнуть. будет не совсем читаемо, зато в одну строку.
Это видимо привычка перепроверять заполненность реквизитов.
PS может port тоже в свойстве хранить?
Это видимо привычка перепроверять заполненность реквизитов.
PS может port тоже в свойстве хранить?
Majordomo (GitHub) на cubietruck + MegaD + 1-wire
CONNECT: http://connect.smartliving.ru/profile/311
CONNECT: http://connect.smartliving.ru/profile/311
- Kod.Begemot
- Сообщения: 358
- Зарегистрирован: Чт июн 20, 2013 5:53 pm
- Благодарил (а): 32 раза
- Поблагодарили: 42 раза
Re: Имя объекта как свойство класса
Да, конечно - порт тоже будет свойством.
Сейчас как-раз создаю объекты. пишу методы, получается на мой взгляд логично и как-то универсально, что-ли.
Вопрос - а если свойство не указано - то что произойдет в данном случае?
и ещё вопрос - вот вы писали что " нет проверки на опечатку в имени", а может можно как-то в условии проверять наличие такого объекта, какое имя указано?
Сейчас как-раз создаю объекты. пишу методы, получается на мой взгляд логично и как-то универсально, что-ли.
Вопрос - а если свойство не указано - то что произойдет в данном случае?
и ещё вопрос - вот вы писали что " нет проверки на опечатку в имени", а может можно как-то в условии проверять наличие такого объекта, какое имя указано?
- Bagir
- Сообщения: 1614
- Зарегистрирован: Вт сен 17, 2013 6:46 pm
- Откуда: Ярославская область город Углич
- Благодарил (а): 212 раз
- Поблагодарили: 375 раз
Re: Имя объекта как свойство класса
Можно в цикле перебирать все объекты в поисках своего. Но для данной задачи это не целесообразно, сильно раздует код и увеличит процессорное время. Вообщем не советую. а вот условие if($LinkedBridge) {...} будет очень даже кстати. Даже если мы планируем, что эти свойства должны быть обязательны, все равно может быть ситуация, когда свойство не будет задано, и условие поможет корректно ее обойти.
У меня сейчас так все данные с объектов датчиков передаются объектам комнат.
У меня сейчас так все данные с объектов датчиков передаются объектам комнат.