|
Подскажите, как делаются фабрики?
|
|||
---|---|---|---|
#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&fpage=13&tid=1459857]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 140ms |
0 / 0 |