Страница 1 из 2
Баг в наследовании свойств объектов.
Добавлено: Ср окт 26, 2016 3:49 pm
nightwind
Решил упорядочнить дефолтное дерево классов.
Создал класс Sensor,
Свойства класса:
Код: Выделить всё
alive
aliveTimeOut
LinkedRoom
updated
updatedTime
Все остальные классы сенсоров сделал производными от этого. Соответствующие свойства в наследующих классах поубирал.
Вроде все работает. НО!!
http://joxi.ru/Dr8OjdlT3lOEA6
Как видно, в температурном сенсоре создаются заново приватные свойства, а в наследованные от Sensor не пишется нифига. Я их удалял 2 раза, не помогло. Как быть?
Я понимаю, что если убить сенсоры и пересоздать объекты заново - скорее всего они наследуют. но не охота же. Если есть возможность переподчинить - то должно и наследовать правильно, не?
Кастую Сергея в топик
upd. пересоздал класс tempsensor сразу установив родительским sensor. те же яйца, свойства в объектах класса двоятся
Re: Баг в наследовании свойств объектов.
Добавлено: Ср окт 26, 2016 10:46 pm
xor
nightwind писал(а):Соответствующие свойства в наследующих классах поубирал.
Т.е., как я понял, создан общий класс с определенными свойствами Сенсор, потом был создан наследник tempsensor, в котором вы удалили родительские свойства и добавили новые одноименные?
Мсье знает толк в извращеньях!))
А в методах this не используется случайно?
Попробуйте при создании подкласса-наследника не удалять базовые свойства, тогда свойство с именем, напр, АЛИВЕ в подклассе будет единственным и неповторимым.
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 6:30 am
nick7zmail
Несколько раз встречался с "двоением" свойств, когда свойства создавались новые, а не писались в родительские. Спасала перезагрузка системы.
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 12:35 pm
nightwind
xor писал(а):nightwind писал(а):Соответствующие свойства в наследующих классах поубирал.
Т.е., как я понял, создан общий класс с определенными свойствами Сенсор, потом был создан наследник tempsensor, в котором вы удалили родительские свойства и добавили новые одноименные?
Мсье знает толк в извращеньях!))
А в методах this не используется случайно?
Были у меня классы из коробки - keySensors, tempSensors, movementSensors - все они отличаются 1-2 свойствами.
я создал класс Sensor {alive aliveTimeOut LinkedRoom updated updatedTime} и указал его базовым для tempSensors. в tempSensors перед этим удалил все свойства кроме temp.
Никакого извращенства нет - классика наследования.
создал объект класса tempSensors - и на его странице свойства двояться. и двоит их скорее всего именно метод с обращениями $this->
Перезагрузка не помогла. куда копать, как быть??
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 12:42 pm
xor
Ну, опубликуйте методы Сенсоров и Темп, в методах Темп наверняка стоит галка про Запускать родительский метод, не?
Отправлено с моего Nexus 5 через Tapatalk
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 1:44 pm
nick7zmail
nightwind писал(а):
Перезагрузка не помогла. куда копать, как быть??
Куда копать в таком случае - честно не знаю. Попробуйте с нуля подобное дерево создать. Если проблема повторится - баг системы. Если не повторится - что-то случилось при переносе классов в родительский.
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 2:21 pm
nightwind
Класс Sensor
Код: Выделить всё
Свойства класса:
alive
aliveTimeOut
LinkedRoom
updated
updatedTime
Методы класса:
onAlive
$old=$params['OLD_VALUE'];
$new=$params['NEW_VALUE'];
//return;
//say("old=".$old." : new= ".$new);
if ($old !=$new) {
if ($new=="0") {say($this->object_title. " умер");}
else{ say($this->object_title. " работоспособность восстановлена");}
}
tempSensors
Код: Выделить всё
Свойства класса:
alive
aliveTimeOut
LinkedRoom
updated
updatedTime
Методы класса:
onAlive
$old=$params['OLD_VALUE'];//
$new=$params['NEW_VALUE'];
//return;
//say("old=".$old." : new= ".$new);
if ($old !=$new) {
if ($new=="0") {say($this->object_title. " умер");}
else{ say($this->object_title. " работоспособность восстановлена");}
}
Объекты класса:
Видно, что наследуется. Но странно уже то, что в классе темпсенсор в выводе нет объектов, а они по факту в системе есть. И видны только наследуемые свойства, а приватных свойств в подклассах не видно. косяк где то здесь, да?
Ни один дочерний метод нигде не перекрывает родительский.
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 4:57 pm
nightwind
в базе в таблице pvalues для объекьа, у которого двоятся свойства, не заполнено поле property name
кастую сергея в тред! непонятно нифига
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 6:03 pm
sergejey
Видимо, где-то ошибка, но сейчас я не смогу с ней разобраться. Вы можете попробовать сами найти момент возникновения проблемы, воспроизведя её на чистой системе и наблюдая за тем, что происходит в базе данных. Момент возникновения проблемы уже половина решения.
Re: Баг в наследовании свойств объектов.
Добавлено: Чт окт 27, 2016 6:26 pm
nightwind
Все заглючило в тот момент, когда я класс tempsensor переподчинил вновь созданному (выставил в свойствах родителя). при этом в системе уже были экземпляры класса tempsensor.
попробую воспроизвести глюк заново. бэкап есть)