Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: вызов по необходимости
но писать такое очень леньки
хотелось бы инкапсулировать проверку и подавать на вход только метод получения значения, а уже там внутри пусть само вроверяет наличие значения и необходимость расчета нового значения
есть мысли как оформить такой вызов?
DelphinPRO
Отправлено: 12 Мая, 2015 - 15:16:46
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
через магию __get ?
----- Чем больше узнаю, тем больше я не знаю.
DlTA
Отправлено: 12 Мая, 2015 - 15:38:20
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
// проверяем наличие значения по параметрам и возвращаем
}
}
можно было бы такое замутить, но переписывать дофига, и не знаю зачем, но вдруг в каком то из методов исходного класса понадобится получать кешированное значение
MAXUS
Отправлено: 13 Мая, 2015 - 08:18:13
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
DlTA пишет:
DelphinPRO пишет:
через магию __get ?
иначе говоря заюзать шаблон прокси
можно было бы такое замутить, но переписывать дофига, и не знаю зачем, но вдруг в каком то из методов исходного класса понадобится получать кешированное значение
Иначе говоря шаблон registry. Но перед этим определиться зачем...
(Добавление)
DelphinPRO пишет:
через магию __get ?
Тока учесть, что __get вызывается при обращении к недоступным свойствам. Т.е. если какое-то свойство определить, то он уже не сработает.
А по поводу шаблонов... Это как в литературе, музыке и кино. Нет чистых жанров. Есть жанровые признаки. Чистый жанр бывает только в начале его образования, а далее как правило идет смешение в зависимости от творческой задачи. С шаблонами, кмк, точно также.
после echo в 7 и 9-й строчках (Добавление)
В первом случае - не определена и, следовательно, не доступна; во втором - определена и доступна (поскольку public).
MAXUS
Отправлено: 13 Мая, 2015 - 15:14:58
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Sail пишет:
В первом случае - не определена и, следовательно, не доступна; во втором - определена и доступна (поскольку public).
Ну дак. А я о чем говорю? Соответственно, если свойство определить, то __get() не отработает. Соответственно, в случае с задачей создать кэш объекта надо это учитывать. Синглтон так создать можно, а вот кэшировать не получится.
Ну и ты вот скажи, удобно читать вывод var_dump без тэга <pre>? Я может чего не понимаю, вполне допускаю это, но в данном случае идет вывод string и особой роли не играет. А меня лично напрягает постоянно в примерах дописывать <pre> и </pre>... А по иному читать вывод не удобно. В данном случае скопипастил код, запустил и все понял без дополнительных изощрений. Или я не прав?
Как видите, в том классе $bar объявлена и иногда даже определена.
Но извне класса она недоступна.
Потому мимо __get() и не проходим.
В первоначальном-же примере она объявляется и инициализируется "на лету" как public-свойство, доступное извне класса... потому второе обращение к ней и проходит мимо __get().
MAXUS
Отправлено: 13 Мая, 2015 - 20:04:07
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
Sail пишет:
Ну и всё-таки ещё разок про определённость и доступность...
Да я ведь и не спорю. Просто речь была о кэше и о предложении реализовать его через __get(). Я просто отметил, что эту особенность надо учитывать. А так, кмк, это типичный реестр с некоторыми нюансами.
DeepVarvar
Отправлено: 13 Мая, 2015 - 20:48:14
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Что мешает отнаследовать нужные классы от родителя с магией?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.