Страница 2 из 2

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 10:48 am
Kod.Begemot
Не, всё-равно ошибка...
с

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

$this->callMethod("TurnOn", );  
вообще "Phfrse error"

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 10:50 am
nick7zmail
Kod.Begemot писал(а): вообще "Phfrse error"
Читай предыдущее сообщение, мне кажется там рабочий вариант))про передачу имени.

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 11:02 am
Kod.Begemot
ага...
попробовал в цикле сделать:

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

$objects=getObjectsByClass("Relay");
foreach($objects as $obj) {
callMethod($obj['TITLE'].'.Refresh',$obj);
} 
а в методе:

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

$Status=getGlobal($params['NAME'].'.Status');
//$Status=$this->getProperty("Status");
if ($Status) {
cm($params['NAME'].'.TurnOn');
//$this->callMethod("TurnOn"); 
} else {
 cm($params['NAME'].'.TurnOff');
//$this->callMethod("TurnOff"); 
}

 
Ошибок нет, но и не работает... Видимо я неправильно имя передаю...

upd.

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

callMethod($obj['TITLE'].'.Refresh',array('NAME'=>$obj,)); 
 
тоже не работает...
опыта в программировании мало.. :(

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 11:10 am
nick7zmail

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

callMethod($obj['TITLE'].'.Refresh',array('NAME'=>$obj['TITLE']));
А в самом Refresh вроде все норм.

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 1:30 pm
Kod.Begemot
Всё, сам я виноват! :( Всё заработало, даже с моими старыми методами. :?
Прошу прощения, сам виноват. Ночь на дворе была глубокая, видимо потому и накосячил.
Там в TurnOn и TurnOff у меня вызов метода из класса MegaD, имя объекта задается в свойстве, которое было не прописано в одном из объектов. Моя вина - не сделал перед вызовом метода проверки на наличие там свойств...
Сейчас выполняется, но только вот - очень медленно... Время выполнения скрипта ~ 30 секунд. в классе - 12 объектов.
Если в любом из подклассов код метода очистить - время уменьшается в 2 раза, соответственно... В чем может быть проблема?
Хотя, пожалуй, создам новую тему для этого. Это явно не в контексте.
Большое спасибо nick7zmail за помощь!

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 2:29 pm
nick7zmail
Пожалуйста) Мозги размять - лишним не бывает). А на счет торможения - все логично же вроде...скрипты же к меге запрос делают, как я понял. А пока запрос пошлют - пока ответ придет. Вот тебе и 2-3 секунды на каждый запрос, а кол-во запросов по кол-ву объектов...вот и 30 сек. Единственный вариант - оптимизировать запросы как то. Делать 1 запрос, потом уже раскидывать по объектам свойства, к примеру.

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Добавлено: Пн авг 22, 2016 2:57 pm
Kod.Begemot
У меня этот скрипт занимается несколько другим - он синхронизирует состояние выходов Мегадевайсов со свойствами объектов.
нужен на случай перезагрузки меги, для того, чтобы свет снова загорелся там, где он был включен до перезапуска. Мега при включении отдает параметр "st=1", вот на него и смотрю.
Насчет тормозов при обращении к мегам - думал уже, тем паче что в половине объектов (PWM) использую медленное включение/выключение.
...
О, пока писал пост - отрапортовала "система контроля здоровья сетевых устройств" - одна из мег зависла, и была перезапущена. И всё, теперь скрипт выполняется за ~1 секунду!!!
Урра! заработало!!
Ещё раз спасибо!
Всё, теперь подкручу немного скрипт рефреша PWM каналов, сделаю при рефреше скорость максимальную нарастания, чтобы быстрее визуально процесс происходил. Теперь отказоустойчивость возросла :) Мега зависла - её рестартуем, Мега перзагрузилась (это мы её, или она сама, к примеру сохранили что-то в её веб интерфейсе) - и свет гаснет только на 1-2 секунды :)