![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
neoks |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Например, есть класс с несколькими методами и есть в нем один метод который вызывается постоянно перед тем как вызвать необходимый для какой та проверки, например проверить есть ли соединения с БД, если есть то продолжить вызов метода если нет то прервать )
Например:
Возможно ли такое ?, если нет то придется по старинке проверять в каждом методе необходимые параметры )) |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
а так нельзя? |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
или так Это сообщение отредактировал(а) ksnk - 27.9.2012, 15:49 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
__construct()
Добавлено через 45 секунд а для прерывания конечно же throw Exception -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
neoks |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Работает только если перед методом стоит знак ( _ ) почему так ? переписывать все методы как-то не особо хочется )) Не пойму а как он может определить, вызывается только один раз, как вариант писать какую-та переменную с статусом true/false и потом в каждом методе проверять ее ) |
|||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
__construct() вызывается при new class();
__call Вызывается всегда когда к методу нетe доступа извне грубо говоря
Это сообщение отредактировал(а) Sanchezzz - 27.9.2012, 17:20 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
||||
|
||||
Sanchezzz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1670 Регистрация: 19.11.2006 Где: Voronezh Репутация: 41 Всего: 60 |
TS Если вы так хотите сделать по уму зашейте соединение БД отдельно в static свойство другого класса и вызывайте через функцию, которая будет получать конект если его нету или возвращать соединение.
Этот метод даст вам обращаться к функциям класса неявно что добавляет удобность на мой взгляд. a::getUser(1); Конечно придется там где используется Бд везде воткнуть bd::init(); в функцией я обычно решаю такой вопрос поиском и заменой Это сообщение отредактировал(а) Sanchezzz - 27.9.2012, 17:56 -------------------- Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS. |
|||
|
||||
neoks |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Ну как я читал как я пробовал
__construct() вызывается когда создается новый класс __call вызывается когда в классе нет того метода который мне нужен, я пользуюсь им что ошибки не вылазили, но не вызывается когда метод есть в классе )) Задача как я писал нужно в каждом методе проверить есть соединения с бд или еше че )) то есть сейчас я везде в методах пишу типа
И так в каждом почти методе почти в каждом классе, хотелось бы упростить эту задачу всего одной функцией Как показал ksnk работает тока если во всех методах дописать знак (_) то есть _a() _b() _show() логику я понял ) Но как быть если я сделаю так ?
То тут __call() уже не сработает так как вызвал правильно и не будет не какой проверки ) |
||||
|
|||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 26 Всего: 101 |
||||
|
||||
neoks |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Вот именно это мне и нужно, нужно проверить как-то один раз, а как я хз, у меня класс это модуль загружаемый с адресной строки, я могу вбить там любой модуль и любой метод ) и все это мне нужно проверять чтоб умники там не хулиганили ![]() |
|||
|
||||
ksnk |
|
||||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Это нужно было, чтобы сработал сам метод call, иначе выполнится собственный метод. Можно его сделать private, но это тоже означает переписывание кода.
Ну тогда нужно вставить проверку и запуск прямо в этот самый вызов
Это сообщение отредактировал(а) ksnk - 27.9.2012, 18:48 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||||
|
|||||||
neoks |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
А решил по другому сделать, не знаю почему сразу не подумал, у меня при автозагрузки класса вызывается метод init(), добавил еше init_member() равносильно __construct(), ну проверять все же приходится но теперь вместо с десяток строк мона написать одну )
Но все же хотелось бы ка кто вообще без проверки в методах сделать чтоб какой та отдельный метод все проверял ) |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
переименовать и все. можно сделать это динамически через какой-то classkit. но нестабильно-экспериментально-нафига? архитектурно это можно решить, работая с исключениями. на верхнем уровне — перехват. на нижнем — подавление/дополнительная работа только в случае необходимости. вот, дискуссия была: Какой смысл в исключениях (Exeption)? |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Ну и что? Написали же. В конструкторе. Именно этим, кстати, неудобны статические методы. Ты постоянно в каждом методе должен думать о том, готово и валидно ли окружение у тебя (есть ли коннект, хватает ли места на диске и т.д.). В обычном случае, для вызова любого метода любого объекта вам потребуется сначала инстанцировать сам объект. И у вас обязательно будет вызван конструктор, где можно подготовить рабочее окружение и выполнить необходимые проверки. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |