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]   

> Без описания
Scorp24
Отправлено: 22 Января, 2012 - 16:13:24
Post Id


Новичок


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


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




Доброго времени суток!

Класс, реализует проверку на соблюдение правил ввода символов:

CODE (htmlphp):
скопировать код в буфер обмена
  1. class Check
  2. {
  3.     // функция заносит фрагменты строк в массив, для их дальнейшей проверки
  4.     public function subToArr($chars)
  5.     {
  6.         while (условие) {
  7.             $chars = $substr;
  8.             $arr_substr[] = $substr;
  9.         }    
  10.         foreach($arr_substr as $val) {
  11.             subToArr($val); // собственно line 89
  12.         }
  13.     }
  14.  
  15. }


Ошибка следующая:

Fatal error: Call to undefined function subtoarr() in Z:\home\localhost\www\task\Class.php on line 89

В чем ошибка, подскажите, плз?!
 
 Top
OrmaJever Модератор
Отправлено: 22 Января, 2012 - 16:45:29
Post Id



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


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


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




Ну subToArr() это не функция, а метод который должен вызывается из обьекта


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Scorp24
Отправлено: 22 Января, 2012 - 16:52:58
Post Id


Новичок


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


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




OrmaJever пишет:
Ну subToArr() это не функция, а метод который должен вызывается из обьекта


CODE (htmlphp):
скопировать код в буфер обмена
  1. class Check
  2.     {
  3.         // функция заносит фрагменты строк в массив, для их дальнейшей проверки
  4.         public function subToArr($chars)
  5.         {
  6.            function countChars($chars) //забыл упомянуть про этот метод и собственно line 13
  7.            {
  8.                возвращает true или false;
  9.            }
  10.            while (countChars($chars) == true) {
  11.                 $chars = $substr;
  12.                 $arr_substr[] = $substr;
  13.             }    
  14.             foreach($arr_substr as $val) {
  15.                 $this->subToArr($val); // исправил (ранее пробовал)
  16.             }
  17.         }
  18.      
  19.     }


теперь такая ошибка:

Fatal error: Cannot redeclare countchars() (previously declared in Z:\home\localhost\www\task\Class.php:13) in Z:\home\localhost\www\task\Class.php on line 13
 
 Top
OrmaJever Модератор
Отправлено: 22 Января, 2012 - 16:58:56
Post Id



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


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


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




почему эта функци определяется внутри метода? Вынесите её отдельным методом и обращайтесь через $this->countchars()


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Scorp24
Отправлено: 22 Января, 2012 - 17:04:13
Post Id


Новичок


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


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




OrmaJever пишет:
почему эта функци определяется внутри метода? Вынесите её отдельным методом и обращайтесь через $this->countchars()


Делал и так, но появляется другая ошибка:

Warning: Invalid argument supplied for foreach() in Z:\home\localhost\www\task\Class.php on line 89

CODE (htmlphp):
скопировать код в буфер обмена
  1.     class Check
  2.         {
  3.             // функция заносит фрагменты строк в массив, для их дальнейшей проверки
  4.             public function subToArr($chars)
  5.             {
  6.                while ($this->countChars($chars) == true) {
  7.                     $chars = $substr;
  8.                     $arr_substr[] = $substr;
  9.                 }    
  10.                 foreach($arr_substr as $val) { // line 89
  11.                     $this->subToArr($val);
  12.                 }
  13.             }
  14.          
  15.         }
 
 Top
OrmaJever Модератор
Отправлено: 22 Января, 2012 - 17:13:22
Post Id



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


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


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




Так, я вгледелся в код и понял что это беда.
1) Если $this->countChars($chars) вернёт true то цыкл будет бесконечный, скорее всего тут нужно условие
2) Масив $arr_substr, нужно внчале метода обьявить ($arr_substr = array()), это нужно для того что-бы небыло notice, и для цыкла foreach


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Scorp24
Отправлено: 22 Января, 2012 - 17:30:54
Post Id


Новичок


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


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




OrmaJever пишет:
Так, я вгледелся в код и понял что это беда.
1) Если $this->countChars($chars) вернёт true то цыкл будет бесконечный, скорее всего тут нужно условие
2) Масив $arr_substr, нужно внчале метода обьявить ($arr_substr = array()), это нужно для того что-бы небыло notice, и для цыкла foreach


Искренне благодарен!
Разобрался, ответ в пункте 2, необходимо было массив объявить в начале метода.
 
 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