Здравствуйте подскажите принцип действия: вот функция PHP: 400 function template_preprocess_forums(&$variables) { 401 $variables['tid'] = $variables['term']->id(); .............. после строки 400, вместо того что бы зайти в тело функции, интерпретатор уходит в другой участок кода, долго блуждает по другим функциям, набирает по ходу $variables и потом, каким то чудом возвращается на 401 строку этой функции. Что указывает ему что надо перейти на другой участок кода, и каким образом он возвращается?
функцию нужно вызвать. Интерпретатор не заходит в функцию просто так. Он заходит только, если кто-то эту функцию вызывал. Ищи где она вызывается и смотри там. --- Добавлено --- если ты работаешь в IDE, то ctrl+click по функции покажет, где она вызывается.
слева направо 401 строка читается примерно как 1) присвоить ключу тид массива лежащего в переменной с именем вэриэйблз 2) результат выполнения метода айди объекта 2.1) лежащего в ключе терм массива лежащего в переменной вэриэйблз. то есть выполняется метод айди - программа на это время уходит в другие куски кода. Это называется стэк вызова. А потом метод айди возвращает какой-то результат - появляется какое-то значение. И это значение размещается в нужном ключе нужного массива, и на этом работа со строкой 401 заканчивается.
Код (Text): no usage found in progect files Все файлы скачаны в проект.... функцию нужно вызвать - я ставлю точку останова на ней (строка 400), то-есть она вызвана ранее, следующий шаг уходит на другую функцию. слева направо 401 строка читается примерно как - тут понятно более менее $variables['term']->id(); - обращение к методу id(), понятно что уходит отсюда. Не понятно почему со строки 400 уходит... дополню: на строке 400 $variables вообще нету. на строке 401 он есть, и заполнен
А, я тебя кажется понял. Тебя интересует почему при отладке он с 400 уходит в какие-то дебри а потом возвращается к 401. Когда интерпретатор видит 401 строку, он в ней видит в первую очередь выражение присвоения. А присвоения чего? Вот за этим он должен выполнить правую сторону выражения. А там метод объекта. И вот он улетает выполнять этот метод. Потом другой-третий-пятый. Всё. Вернулось значение. Теперь он показывает тебе что переменная поменялась и в ней такое-то значение. Для этого он акцентируется на 401 строке. Касательно есть-нет $variables на 400 и 401 строке. На 400 его на самом деле нету. Это ж декларация функции/метода. А вот сразу после входа - переход с 400 на 401 - идет уже выполнение метода. А раз выполнение, значит у аргумента должны быть значения. И он тебе показывает значение аргумента для текущего вызова функции, декларированной в строке 400. А после пробежки и присвоения - новое состояние этой переменной в рамках завершения работы строки 401.
то-есть, когда на строке 400 делаю шаг, он переходит на строку 401, и с нее без остановки уходит к id() ... так? да, тогда яснее становится --- Добавлено --- не получается, с 400 строки переходит не туда, куда с 401...
Смотря как ты отладку делаешь. Если без нырков - то с 401 на 402 перейдет и дополнит 401 свежей информацией.
то-есть всетаки идет так: стр 400>>уходит в дебри>> стр 401 >> id() --- Добавлено --- отладку просто стр 400 step into или step over все равно уходит
Давай с самого начала. Тебя интересует как пхп-машина с алгоритмом работает или у тебя какой-то запор при отладке?
Я ковыряю друпал 8 , мне не очень нравится как работает встроенный форум, я хочу его модернизировать слегка. Вот разбираюсь как он устроен, заодно и познания в php ооп расширяю. --- Добавлено --- вот что на 400 стр вот что на 401
видит, что требуется присвоение результата выполнения метода id() выполняет метод id() для получения результата его работы присваивает результат переменной