За последние 24 часа нас посетили 26988 программистов и 1512 роботов. Сейчас ищут 870 программистов ...

Прошу направить в нужном направлении

Тема в разделе "PHP для новичков", создана пользователем oleg_, 14 сен 2016.

  1. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Здравствуйте
    подскажите принцип действия:
    вот функция
    PHP:
    1. 400 function template_preprocess_forums(&$variables) {
    2. 401 $variables['tid'] = $variables['term']->id();
    3. ..............
    после строки 400, вместо того что бы зайти в тело функции, интерпретатор уходит в другой участок кода, долго блуждает по другим функциям, набирает по ходу $variables
    и потом, каким то чудом возвращается на 401 строку этой функции.
    Что указывает ему что надо перейти на другой участок кода, и каким образом он возвращается?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    функцию нужно вызвать. Интерпретатор не заходит в функцию просто так. Он заходит только, если кто-то эту функцию вызывал. Ищи где она вызывается и смотри там.
    --- Добавлено ---
    если ты работаешь в IDE, то ctrl+click по функции покажет, где она вызывается.
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    слева направо 401 строка читается примерно как
    1) присвоить ключу тид массива лежащего в переменной с именем вэриэйблз
    2) результат выполнения метода айди объекта
    2.1) лежащего в ключе терм массива лежащего в переменной вэриэйблз.

    то есть выполняется метод айди - программа на это время уходит в другие куски кода. Это называется стэк вызова. А потом метод айди возвращает какой-то результат - появляется какое-то значение. И это значение размещается в нужном ключе нужного массива, и на этом работа со строкой 401 заканчивается.
     
  4. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Код (Text):
    1. no usage found in progect files
    Все файлы скачаны в проект....
    функцию нужно вызвать - я ставлю точку останова на ней (строка 400), то-есть она вызвана ранее, следующий шаг уходит на другую функцию.
    слева направо 401 строка читается примерно как - тут понятно более менее $variables['term']->id(); - обращение к методу id(), понятно что уходит отсюда.
    Не понятно почему со строки 400 уходит...
    дополню: на строке 400 $variables вообще нету.
    на строке 401 он есть, и заполнен
     
    #4 oleg_, 14 сен 2016
    Последнее редактирование: 14 сен 2016
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    А, я тебя кажется понял. Тебя интересует почему при отладке он с 400 уходит в какие-то дебри а потом возвращается к 401.
    Когда интерпретатор видит 401 строку, он в ней видит в первую очередь выражение присвоения. А присвоения чего? Вот за этим он должен выполнить правую сторону выражения. А там метод объекта. И вот он улетает выполнять этот метод. Потом другой-третий-пятый. Всё. Вернулось значение. Теперь он показывает тебе что переменная поменялась и в ней такое-то значение. Для этого он акцентируется на 401 строке.

    Касательно есть-нет $variables на 400 и 401 строке. На 400 его на самом деле нету. Это ж декларация функции/метода. А вот сразу после входа - переход с 400 на 401 - идет уже выполнение метода. А раз выполнение, значит у аргумента должны быть значения. И он тебе показывает значение аргумента для текущего вызова функции, декларированной в строке 400.
    А после пробежки и присвоения - новое состояние этой переменной в рамках завершения работы строки 401.
     
  6. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    то-есть, когда на строке 400 делаю шаг, он переходит на строку 401, и с нее без остановки уходит к id() ... так?
    да, тогда яснее становится
    --- Добавлено ---
    не получается, с 400 строки переходит не туда, куда с 401...
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Смотря как ты отладку делаешь. Если без нырков - то с 401 на 402 перейдет и дополнит 401 свежей информацией.
     
  8. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    то-есть всетаки идет так: стр 400>>уходит в дебри>> стр 401 >> id()
    --- Добавлено ---
    отладку просто стр 400 step into или step over все равно уходит
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    400 - 401+инфа по вызову метода - дебри - 401+инфа по результатам присвоения
     
  10. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    попонятней поясни, я начинающий:)
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Давай с самого начала. Тебя интересует как пхп-машина с алгоритмом работает или у тебя какой-то запор при отладке?
     
  12. oleg_

    oleg_ Активный пользователь

    С нами с:
    28 ноя 2012
    Сообщения:
    108
    Симпатии:
    2
    Я ковыряю друпал 8 , мне не очень нравится как работает встроенный форум, я хочу его модернизировать слегка.
    Вот разбираюсь как он устроен, заодно и познания в php ооп расширяю.
    --- Добавлено ---
    вот что на 400 стр
    400.JPG

    вот что на 401

    401.JPG
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    видит, что требуется присвоение результата выполнения метода id()
    выполняет метод id() для получения результата его работы
    присваивает результат переменной