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
Форумы портала PHP.SU :: Версия для печати :: Обращение к функциям класса
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Обращение к функциям класса

Страниц (1): [1]
 

1. webpauk - 07 Февраля, 2014 - 13:11:18 - перейти к сообщению
мои классы наследуют базовый класс. в каждом классе есть с десяток функций.
как прописать в конструкторе, что при обращении к функции класса сделать что-то
2. eai - 07 Февраля, 2014 - 13:44:08 - перейти к сообщению
webpauk пишет:
мои классы наследуют базовый класс. в каждом классе есть с десяток функций.
как прописать в конструкторе, что при обращении к функции класса сделать что-то


Все методы делаем в паренте приватными, вызов вне класса через __call делаем, а в наследнике перегружаем __call
3. Invert - 07 Февраля, 2014 - 15:49:24 - перейти к сообщению
webpauk пишет:
как прописать в конструкторе, что при обращении к функции класса сделать что-то

Конкретно в конструкторе никак нельзя. И фу-ции класса называются методами.

Можно сделать как написал eai, или сделать геттер getMethod( $name ), который сперва будет делать что-то, а потом передавать управление нужному методу.
4. eai - 07 Февраля, 2014 - 15:58:51 - перейти к сообщению
Invert пишет:
webpauk пишет:
как прописать в конструкторе, что при обращении к функции класса сделать что-то

Конкретно в конструкторе никак нельзя. И фу-ции класса называются методами.

Можно сделать как написал eai, или сделать геттер getMethod( $name ), который сперва будет делать что-то, а потом передавать управление нужному методу.

С геттером не прокатит если метод имеет более чем один аргумент
5. Invert - 07 Февраля, 2014 - 16:04:08 - перейти к сообщению
Прокатит, если использовать call_user_func_array().
Но вопрос не в этом...
6. teddy - 07 Февраля, 2014 - 16:31:56 - перейти к сообщению
Цитата:
Нужно віполнить предварительную проверку при попытке обращения к функции класса

Легко
PHP:
скопировать код в буфер обмена
  1. class Test{
  2.     public function myMethod($name, $age){
  3.         echo 'Привет, '.$name.'. Тебе '.$age.' лет';
  4.     }
  5. }
  6.  
  7. $rc = new ReflectionClass('Test');
  8. if($rc->hasMethod('myMethod')){
  9.     //делайте что угодно, метод myMethod есть у класса Test
  10.     $method = $rc->getMethod('myMethod');//получили экземпляр класса ReflectionMethod
  11.     $method->invoke($rc->newInstance(), 'Mike', 25);//выполнили этот метод
  12. }else{
  13.     //нет такого метода
  14. }
7. caballero - 07 Февраля, 2014 - 16:58:33 - перейти к сообщению
кто нибудь вообще читал о чем тема?

чел хочет что то типа аспектов, что, разумеется стандартным образом нереализуемо
да и сама задача практичекого смысла не имеет
8. eai - 07 Февраля, 2014 - 17:10:53 - перейти к сообщению
caballero пишет:
кто нибудь вообще читал о чем тема?

чел хочет что то типа аспектов, что, разумеется стандартным образом нереализуемо
да и сама задача практичекого смысла не имеет



Дрогой мы посольство не понимаем, а правительство на другой планете живет
9. Invert - 07 Февраля, 2014 - 17:37:59 - перейти к сообщению
caballero пишет:
кто нибудь вообще читал о чем тема?

Нет конечно, мы сразу ответы пишем. И ответ ТСу был дан.

 

Powered by ExBB FM 1.0 RC1