$ob->method1("PHP is proud to announce TestFest 2010. TestFest is PHP's annual
campaign to increase the overall code coverage of PHP through PHPT tests. During
TestFest, PHP User Groups and individuals around the world organize local events
where new tests are written and new contributors are introduced to PHP's testing
suite.");
?>
В данном примере методы 3 и 4 не дают желаемого результата, а 3 метод вызывает фатальную ошибку. Как заставить работать 3 и 4 методы? Если их не писать как вложенные то все отлично, но если ситуация требует вложенности?Отредактировано модератором: JustUserR, 28 Июня, 2010 - 15:28:13 Обрамил PHP-код в соответствующий BB-тег
kochan10
Отправлено: 28 Июня, 2010 - 13:27:16
Гость
Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009
Помог: 0 раз(а)
функции задаются отдельно. потому что если ты верхнюю по вложенности функцию вызовешь второй раз, то будет ошибка, потому что она попробует создать уже созданную функцию. лучше задавать их отдельно, без вложенностей, и просто вызывать одну функцию из другой (Добавление)
и ещё. ты вызываешь третий метод, используй в нём переменную $var1, которую ты не задал. нужно тогда прописать что-то вроде
P.S, В качестве подтверждения моих слов перетяните функции из метода в класс и все будет работать...
kochan10
Отправлено: 28 Июня, 2010 - 14:54:25
Гость
Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009
Помог: 0 раз(а)
переменная var2, хоть и объявлена в четвёртом методе публичной, но она почему-то не передаётся из первого метода (Добавление)
кстати, попробуйте вызвать первый метод ещё раз. сразу после его первого вызова, скажем. и вы поймёте, почему так делать нежелательно.
Fatal error: Cannot redeclare method2()(previously declared in C:\xampp\htdocs\test.php:8) in C:\xampp\htdocs\test.php on line 8
Эта функция уже создана, второй раз нельзя. Поэтому лучше создавать функции там, где будет практически невозможно вернуться к этим строкам, для повторного "создания" функции. (Добавление)
ааааа, публичная - это означает, что её значение не сбросится, после выполнения функции, а останется. чтобы с ней можно было и потом работать. поэтому public $var2 здесь не катит...
method1("PHP is proud to announce TestFest 2010. TestFest is PHP's annual
campaign to increase the overall code coverage of PHP through PHPT tests. During
TestFest, PHP User Groups and individuals around the world organize local events
where new tests are written and new contributors are introduced to PHP's testing
suite.");
?>
kochan10
Отправлено: 28 Июня, 2010 - 15:08:32
Гость
Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009
Помог: 0 раз(а)
да! видишь, у тебя первый метод сделан так, что он. когда его вызывают, декларирует второй метод. и когда ты его вызываешь второй раз, он снова пытается декларировать второй метод. но он уже задекларирован! второй раз нельзя!
method1("PHP is proud to announce TestFest 2010. TestFest is PHP's annual
campaign to increase the overall code coverage of PHP through PHPT tests. During
TestFest, PHP User Groups and individuals around the world organize local events
where new tests are written and new contributors are introduced to PHP's testing
suite.");
?>
Почему так не работает?
kochan10
Отправлено: 28 Июня, 2010 - 15:16:26
Гость
Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009
Помог: 0 раз(а)
потому что у тебя $var2 не передаётся в четвёртый метод. в самом начале первого метода пропиши global $var2;
и всё норм будет.а в четвёртом методе это лишнее. и не вкладывай методы друг в друга. лучше просто вызывай один из другого. так стабильнее. можно вкладывать, но это может повлечь серьёзные ошибки в дальнейшем
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ALEN пишет:
В данном примере методы 3 и 4 не дают желаемого результата, а 3 метод вызывает фатальную ошибку. Как заставить работать 3 и 4 методы? Если их не писать как вложенные то все отлично, но если ситуация требует вложенности?
Использование создания функции внутри другой функции или внутри любого функционального блока само по себе имеет мало пользы - поскольку в общем случае не является замыканием с сохранением контекстной области переменных Если вам необходимо создание именно динамических функций то воспользуйтесь create_function - или же библиотекой runkit для управления существующими методами
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.