|
Подскажите, как делаются фабрики?
|
|||
---|---|---|---|
#18+
Есть фабрика с таким кодом: Код: php 1. 2. 3. 4. 5. 6.
В полученном фабрикой классе мне нужно где-то запомнить исходный datasource. Сейчас я его запоминаю через метод _datasource, который сохраняет в private-переменной полученное значение. Но поскольку метод является публичный, его могут вызвать повторно и изменить значение. Можно передавать datasource в конструктор и запоминать его там, но я бы не хотел загромождать его аргументы. Также можно этот метод вообще убрать, а вместо него в магическом методе __set проверять по debug_backtrace откуда его вызывают и разрешать вызывать только из фабрики. Но как-то это переусложнено. Еще видел трюки с Closure::bind, позволяющие внедрить метод внутрь класса, но это тоже как-то сложно, плюс требует версию 5.4+. Может быть есть другой простой способ влезть в private-scope создаваемого класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2019, 22:17 |
|
Подскажите, как делаются фабрики?
|
|||
---|---|---|---|
#18+
Сделать метод setDataSource ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 11:53 |
|
Подскажите, как делаются фабрики?
|
|||
---|---|---|---|
#18+
Э... От того, что я метод _datasource переименую в setDataSource, он станет работать по другому? Если это будет публичный метод, его сможет вызвать любой. Если это будет private/protected, то фабрика не сможет его использовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:29 |
|
Подскажите, как делаются фабрики?
|
|||
---|---|---|---|
#18+
Сейчас у меня сделано так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Интересует, можно ли такое поведение получить более прямым способом? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2019, 12:40 |
|
|
start [/forum/topic.php?fid=23&msg=39867241&tid=1459857]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 248ms |
total: | 366ms |
0 / 0 |