|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Добрый день. Замыкание, это то, что я нашел близкое по смыслу, может я и ошибаюсь. Проблема такая, мне нужно вызывать метод внутри себя. Приведу пример кода, класс рабочий, но как только вызываю из себя, происходит бесконечный цикл. Может кто подскажет варианты куда идти? Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
Если коротко, что делает - function laBlock: В блок выводится вопрос и варианты ответов, все берется из БД. Мне нужно, чтобы при нажатии кнопки (вариант ответа), function laBlock перерисовала себя с уже новыми данными... Как то так. Буду благодарен любой помощи, где читать, чего делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 11:33 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Код: php 1.
__invoke() тут лишнее, это я экспериментировал. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 11:50 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Зачем в функции саму себя вызывать? это ж рекурсия, она вроде тут не нужна. Выход из неё не прописан, вот и зацикливание происходит. На сколько понимаю здесь Код: php 1.
в функцию не передается параметр, значит берется по умолчанию отсюда Код: php 1.
, то есть единица Если передать в эту функцию параметр со значением нажатой кнопки Код: php 1.
, то всё перерисуется зы: или я чего-то не понял в логике? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:36 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
LuchokЗачем в функции саму себя вызывать? это ж рекурсия, она вроде тут не нужна. Выход из неё не прописан, вот и зацикливание происходит. На сколько понимаю здесь Код: php 1. 2. 3.
в функцию не передается параметр, значит берется по умолчанию отсюда Код: php 1.
, то есть единица Если передать в эту функцию параметр со значением нажатой кнопки Код: php 1.
, то всё перерисуется зы: или я чего-то не понял в логике? Единица и стоит, чтобы при запуске у меня первый вопрос и ответы к нему прорисовывались. Тут все работает. А вот когда я жмакаю на кнопку, у меня происходит зацикливание. Хотя я уже и пытаюсь передать id вытянутый из запроса Код: php 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 13:59 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Блин, накрутил что-то с цитированием. Без Код: php 1.
я не прорисую первые ответы. Причем, в цикл уходит по первому вопросу, на следующий я не перехожу. Может ошибка в том, что я по умолчанию и ответам задаю id а его надо подставлять? Черт, мозги закипели, сейчас буду думать. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 14:03 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Stang, по первой используется значение по умолчанию. это ясно. покажи код, где эта функция (laAnswer) вызывается с передаваемым от пользователя параметром? где-нибудь она еще вызывается иначе как ты принимаемые данные от пользователя будешь обрабатывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:06 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
я бы написал где-то так авторpublic function laBlock ($id=1) { //вопрос echo "<div class=\"divQ\">"; $this->laQuest(); echo "</div>"; echo "<div class=\"divA\">"; if (!isset($_REQUEST['doGo'])) { //ответ $answers = $this->laAnswer($id); } else { $answers = $this->laAnswer(); } echo "</div>"; ?> <form action="<?=$_SERVER['SCRIPT_NAME']?>"> <?php foreach ($answers as $answer) { echo "<input type=\"submit\" name=\"doGo\" value=\"".$answer['answer']."\">"." "; $id = $answer['id_next_question']; } ?> </form> } валидность в валидаторе посмотришь. в блокнотике написал, синтаксис не проверял ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:13 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
вместо тэга кода поставил цитату... Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 15:16 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Гм... Берем, сохраняем сие (ну или подобное) в quest.php, который рисует вопрос XXX и варианты ответов. На кнопку POST вешаем action=quest.php (вызываем сами себя). В который отдаем только что выбранный вариант ответа YYY в $_POST[]. Никаких замыканий, никакой рекурсии. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 16:09 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
авторwhile($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $result[$row['id']] = $row; } $PDOstmt->fetchAll(PDO::FETCH_ASSOC | PDO::FETCH_GROUP) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 17:49 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Замыкание ага) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2018, 22:23 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
DarkMasterГм... Берем, сохраняем сие (ну или подобное) в quest.php, который рисует вопрос XXX и варианты ответов. На кнопку POST вешаем action=quest.php (вызываем сами себя). В который отдаем только что выбранный вариант ответа YYY в $_POST[]. Никаких замыканий, никакой рекурсии. че на чела набросились. учится он. может лабораторку ему надо сделать ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 06:12 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Luchokя бы написал где-то так авторpublic function laBlock ($id=1) { //вопрос echo "<div class=\"divQ\">"; $this->laQuest(); echo "</div>"; echo "<div class=\"divA\">"; if (!isset($_REQUEST['doGo'])) { //ответ $answers = $this->laAnswer($id); } else { $answers = $this->laAnswer(); } echo "</div>"; ?> <form action="<?=$_SERVER['SCRIPT_NAME']?>"> <?php foreach ($answers as $answer) { echo "<input type=\"submit\" name=\"doGo\" value=\"".$answer['answer']."\">"." "; $id = $answer['id_next_question']; } ?> </form> } валидность в валидаторе посмотришь. в блокнотике написал, синтаксис не проверял Ну не знаю, вроде правильно понял, объявил вроде и как глобальную переменную, и крутил по разному, результат тот же, при нажатии кнопки уходит в зацикливание: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Может подобное и с id вопроса провернуть? Тут наверное проще показать... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 17:14 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
И по нажатию кнопки: ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2018, 17:15 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Подскажите где почитать про геттеры, сеттеры и анонимные функции? Что-то моих мозгов пока не хватает для php.net. Не знаю как анонимные функции, а вот геттеры и сеттеры мне точно тут нужны. И вроде понимаю для чего, а вот реализовать не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2018, 17:10 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
Stang, На кой тебе они нужны в твоей задаче? Файл QUEST.PHP Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Идея понятна? Писал здесь, не проверял... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2018, 15:27 |
|
Замыкание в объектах PHP
|
|||
---|---|---|---|
#18+
StangПодскажите где почитать про геттеры, сеттеры и анонимные функции? Что-то моих мозгов пока не хватает для php.net. Не знаю как анонимные функции, а вот геттеры и сеттеры мне точно тут нужны. И вроде понимаю для чего, а вот реализовать не могу. кхм ... Ты мой пример смотрел? ты ж ща запостил практически то же самое, что и в стартовом посте Зайдем с другой стороны. Для начала покажи в какой строчке ты передаешь в функцию lablock значение ответа, получаемого от пользователя при нажатии кнопки, чтобы перестроить страницу вопрос-ответ с новыми данными ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2018, 08:39 |
|
|
start [/forum/topic.php?fid=23&msg=39707110&tid=1460163]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 454ms |
0 / 0 |