| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
G_Z 14.09.2016 05:18
Задача: включить в класс набор свойств из файла (посредством process) и иметь возможность в классах наследниках перекрыть включённые свойства.@main[]
$class[^class::create[]]
$class.property1<br/>
$class.property2
@CLASS
base
@auto[]
^process[$self.CLASS]{@GET_property1[]
included base property1
}
^process[$self.CLASS]{@GET_property2[]
included base property2
}
@CLASS
class
@BASE
base
@create[]Получаем ожидаемое: included base property1 included base property2Пытаемся переопределить одно из свойств:
@main[]
$class[^class::create[]]
$class.property1<br/>
$class.property2
@CLASS
base
@auto[]
^process[$self.CLASS]{@GET_property1[]
included base property1
}
^process[$self.CLASS]{@GET_property2[]
included base property2
}
@CLASS
class
@BASE
base
#@auto[]
@create[]
@GET_property1[]
defined class property1Неожиданно получаем то же: included base property1 included base property2Стоит раскомментировать @auto дочернего класса — получаем ожидаемое:
defined class property1
included base property2Выходит, выполняются оба @auto[], что противоречит документации.@main[]
$class[^class::create[]]
$class.property1<br/>
$class.property2
@CLASS
base
@auto[]
^process[$self.CLASS]{@GET_property1[]
included base property1
}
^process[$self.CLASS]{@GET_property2[]
included base property2
}
$log[^reflection:uid[$self] base auto^#0A]
^log.save[append;/log.txt]
@CLASS
class
@BASE
base
@auto[]
$log[^reflection:uid[$self] class auto^#0A]
^log.save[append;/log.txt]
@create[]
@GET_property1[]
defined class property1Видим в логе: 0x10e18f0b0 base auto 0x10e18f000 class autoПри этом, даже если закомментировать @auto[] дочернего класса и посмотреть в лог получим:
0x103dc20b0 base auto 0x103dc2000 base autoСудя по всему, повторное выполнение происходит из-за process.