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. Nicodinus - 21 Февраля, 2012 - 11:44:05 - перейти к сообщению
Собственно хотел узнать, возможно ли вызвать уже инициализированный класс как функцию? Огорчение

Допустим имеем код
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class test //Думаю тут нужно подключить интерфейс из spl или ещё какой-нить библиотеки, но какой не могу найти//
  3. {
  4.         private $vars = array();
  5.        
  6.         public function add() //Сама функция
  7.         {
  8.                 $args = func_get_args();
  9.                 for($i = 1; $i < sizeof($args); $i += 2) $this->vars[$args[$i-1]] = $args[$i];
  10.                 //пример конечно не удачный, но другого я придумать не смог
  11.         }
  12. }
  13.  
  14. $test = new test;
  15. $test($key1, $value1, $key2, $value2);
  16. ?>
2. sKaa - 21 Февраля, 2012 - 11:51:37 - перейти к сообщению
реализуй магический метод __invoke()
3. Zuldek - 21 Февраля, 2012 - 11:52:36 - перейти к сообщению
$test = new test;
$test->add($key1, $value1, $key2, $value2);
4. Nicodinus - 21 Февраля, 2012 - 11:54:32 - перейти к сообщению
sKaa, спасибо огромное, помогло Закатив глазки , жаль что + не могу поставить Хм
(Добавление)
Zuldek, ты немного меня не понял Радость, я не настолько туп, чтоб так не сделать, вон вариант с __invoke() тащит

PHP:
скопировать код в буфер обмена
  1. class test
  2. {
  3.         public $vars = array();
  4.        
  5.         public function __invoke()
  6.         {
  7.                 $args = func_get_args();
  8.                 $this->add($args);
  9.         }
  10.        
  11.         public function add($args) //Сама функция
  12.         {
  13.                 for($i = 1; $i < sizeof($args); $i += 2) $this->vars[$args[$i-1]] = $args[$i];
  14.                 //пример конечно не удачный, но другого я придумать не смог
  15.         }
  16. }
  17.  
  18. $test = new test;
  19. $test('123', '456', '789', '012');
  20. print_r($test->vars);
5. Zuldek - 21 Февраля, 2012 - 12:04:25 - перейти к сообщению
уже понял, не вник в суть того что требовалось

 

Powered by ExBB FM 1.0 RC1