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 :: Передача массива в метод

 PHP.SU

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


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

> Без описания
rassvet
Отправлено: 10 Февраля, 2011 - 04:55:47
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


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




В скрипте есть место, где методу объекта передается ассоциативный массив:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $fields['url']='http://site.ru/';
  2. $this->db->update_input($this->parser, $fields['url']);

Вот часть метода:
PHP:
скопировать код в буфер обмена
  1. function update_input($input_name, $fields) {
  2.         $row='';
  3.         if( !empty($fields['url']) ){
  4.             $row.=" url='".$fields['url']."',";
  5.             print_r($row);
  6.         }

И тут самое интересное: print_r выдает вот это:

Объясните, пожалуйста, почему на выходе получаем такой результат?
 
 Top
Ch_chov
Отправлено: 10 Февраля, 2011 - 06:05:33
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Цитата:
Передача массива в метод

А почему вы решили, что передаёте в метод массив?

У вас внутри функции $fields = 'http://site.ru/'; поэтому $fields['url'] будет равно 'h' (первый символ строки).
 
 Top
rassvet
Отправлено: 10 Февраля, 2011 - 15:30:16
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


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




$fields = 'http://site.ru/' <- вот тут можно подробнее? Это вы откуда взяли?
 
 Top
garvey
Отправлено: 10 Февраля, 2011 - 15:38:17
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




Да все понятно тут. Если функция принимает массив, то и передавайте вы ей массив, а не строку $fields['url']. Сделайте так, и всё будет работать:
PHP:
скопировать код в буфер обмена
  1. $this->db->update_input($this->parser, $fields);
 
 Top
Мелкий Супермодератор
Отправлено: 10 Февраля, 2011 - 15:50:25
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




rassvet пишет:
$fields = 'http://site.ru/' <- вот тут можно подробнее? Это вы откуда взяли?

Логикой.
Вы передаёте вторым аргументом в функцию строку, а не массив. А в функции пытаетесь к строке обращаться, будто она - массив. Ну строка - и есть подвид массива, вот букву соответствующей позиции и отдаёт.


-----
PostgreSQL DBA
 
 Top
JustUserR
Отправлено: 10 Февраля, 2011 - 15:52:34
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




rassvet пишет:
Объясните, пожалуйста, почему на выходе получаем такой результат
Возможной причиной осуществления предполагаемой ошибки является тот факт что указанный вариант PHP-приложения включает описания области основного потока кода и метода класса для которых не обеспечивается совпадению сигнатур вызова - в частности в качестве передаваемого информационного поля в методе класса осуществляет передача строкового объекта для которого последующего использование оператора квадратных скобок обеспечивает выбор предполагаемого последовательного элемента


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
garvey
Отправлено: 10 Февраля, 2011 - 16:12:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


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




JustUserR. Мне всегда нравились Ваши ответы. Но это уж слишком. Зачем вуалировать элементарную ошибку? Вы только пугаете людей. Извините. Ни в коем случае не хочу ссориться.
 
 Top
rassvet
Отправлено: 10 Февраля, 2011 - 19:04:32
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Нояб. 2010  


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




Всем большое спасибо. Надо же такую оплошность допустил глупую =)

Цитата:
Возможной причиной осуществления предполагаемой ошибки является тот факт что указанный вариант PHP-приложения включает описания области основного потока кода и метода класса для которых не обеспечивается совпадению сигнатур вызова - в частности в качестве передаваемого информационного поля в методе класса осуществляет передача строкового объекта для которого последующего использование оператора квадратных скобок обеспечивает выбор предполагаемого последовательного элемента

P.S. JustUserR, Ваш ответ снова взорвал мой мозг =)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB