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 :: Warning: call_user_func_array()

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: call_user_func_array()
sugresden
Отправлено: 26 Августа, 2015 - 17:24:43
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Добрый день, имеем ошибку
Warning: call_user_func_array() expects parameter 2 to be array, string given in /var/www/html/stats/includes/cla ss_table.php on line 164

код
PHP:
скопировать код в буфер обмена
  1. function callback($html, $callback, $params = array()) {
  2.         $ret = false;
  3.         if (function_exists($callback) or is_array($callback)) {
  4.                 $ret = call_user_func_array($callback, $params ? array($html, $params) : $html);
  5.         } elseif (strpos($callback, '%') !== false) {
  6.                 $ret = sprintf($callback, $html);
  7.         }
  8.         if ($ret !== false) $html = $ret;
  9.         return $html;
  10. }


прочитал про функцию call_user_func_array()
и не понимаю какую функцию вызывает сей оператор....
 
 Top
OrmaJever Модератор
Отправлено: 26 Августа, 2015 - 18:02:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




$html это строка, а второй параметр должен быть массив


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
sugresden
Отправлено: 26 Августа, 2015 - 18:37:30
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




неправильно функция описана ?
 
 Top
DelphinPRO
Отправлено: 26 Августа, 2015 - 20:04:26
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $ret = call_user_func_array($callback, $params ? array($html, $params) : array($html));


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
sugresden
Отправлено: 27 Августа, 2015 - 16:55:31
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




огромное спасибо, но до меня не доходит как это работает
Цитата:
call_user_func_array -- Вызывает пользовательскую функцию с массивом параметров
Описание
mixed call_user_func_array ( callback function [, array param_arr] )

Вызывает пользовательскую функцию function, с параметрами из массива param_arr.


какая функция в моем случае вызывается ?
 
 Top
Sail
Отправлено: 27 Августа, 2015 - 17:05:08
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




sugresden пишет:
какая функция в моем случае вызывается ?

Та, которая передаётся параметром $callback в Вашу функцию callback().
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Августа, 2015 - 17:25:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




sugresden, может так будет ясно:
PHP:
скопировать код в буфер обмена
  1. function myFunc($arg1, $arg2, $arg3) {}
  2.  
  3. call_user_func('myFunc', $arg1, $arg2, $arg3);
  4. // Или
  5. call_user_func_array('myFunc', array($arg1, $arg2, $arg3));

(Добавление)
В случае с объектами:
PHP:
скопировать код в буфер обмена
  1. class MyClass {
  2.     public function myMethod($arg1, $arg2, $arg3) {}
  3. }
  4.  
  5.     array(new MyClass(), 'myMethod'),
  6.     $arg1, $arg2, $arg3
  7. );
  8. // Или
  9.     array(new MyClass(), 'myMethod'),
  10.     array($arg1, $arg2, $arg3)
  11. );

Если метод статичный, то первый аргумент массива строка,
или вместо массива строка вида:
"MyClass::staticMethod"

(Отредактировано автором: 27 Августа, 2015 - 17:29:48)

 
 Top
sugresden
Отправлено: 27 Августа, 2015 - 17:32:47
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




armancho7777777 пишет:
sugresden, может так будет ясно:
PHP:
скопировать код в буфер обмена
  1. function myFunc($arg1, $arg2, $arg3) {}
  2.  
  3. call_user_func('myFunc', $arg1, $arg2, $arg3);
  4. // Или
  5. call_user_func_array('myFunc', array($arg1, $arg2, $arg3));

я понимаю, что написано в вашем примере:
сначала описали функцию myFunc с 3-мя параметрами и потом ее вызвали с 3-мя параметрами

а эту запись я немогу понять


$callback - это же не функция (или все-таки эта ф-ция)
array($html, $params) : array($html) - почему через двоеточие ? аргументы же через запятую перечисляются. Недоходит что то Огорчение
(Добавление)
появилась новая ошибка
Warning: function_exists() expects parameter 1 to be string, array given in /var/www/html/stats/includes/cla ss_table.php on line 163

PHP:
скопировать код в буфер обмена
  1. function callback($html, $callback, $params = array()) {
  2.         $ret = false;
  3.         if (function_exists($callback) or is_array($callback)) { <<<< 163 строчка
  4.                 $ret = call_user_func_array($callback, $params ? array($html, $params) : array ($html));
  5.         } elseif (strpos($callback, '%') !== false) {
  6.                 $ret = sprintf($callback, $html);
  7.         }
  8.         if ($ret !== false) $html = $ret;
  9.         return $html;
 
 Top
DelphinPRO
Отправлено: 27 Августа, 2015 - 17:54:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




sugresden пишет:
а эту запись я немогу понять

тернарный оператор
эквивалентно этому:
PHP:
скопировать код в буфер обмена
  1. if ($params) {
  2.   $params = array($html, $params);
  3. } else {
  4.   $params = array($html);
  5. }
  6. call_user_func_array($callback, $params);


sugresden пишет:
$callback - это же не функция (или все-таки эта ф-ция)

Откуда я знаю? Улыбка Судя по названию - это функция, или метод класса (то что можно выполнить). К тому первый параметр функции call_user_func_array должен быть выполняемым.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
armancho7777777 Супермодератор
Отправлено: 27 Августа, 2015 - 19:42:15
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




sugresden пишет:
$callback - это же не функция (или все-таки эта ф-ция)

PHP:
скопировать код в буфер обмена
  1. $callback = function(){};
  2. $callback();

(Добавление)

(Добавление)
sugresden пишет:


(Добавление)
И вообще там один говногод.
Куча дырявых проверок.
 
 Top
sugresden
Отправлено: 27 Августа, 2015 - 20:25:54
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




возможно, но я не вижу альтернативы.... попробую хотя бы до рабочего состояния довести (если терпения хватит)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB