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 :: debug_backtrace() наоборот - возможно?
Метод one, знает что за ним есть ещё метод two, а метод two, знает о существовании three
Ну или на крайняк, хотябы узнать кол-во методов в цепочке.
=====
Не я один тут ищу ответ на этот вопрос ) но автору так никто и не ответил:
https://stackoverflow.com/questions/48536852/is-there-a-php-function-opposite-to-debug-backtrace-get-the-next-function-name
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
arimanecro пишет:
Не я один тут ищу ответ на этот вопрос ) но автору так никто и не ответил:
никто не знает будущего, в зависимости от конкретной задачи код может пойти по одним методам, в другой - по другим.
Теоретически наверное можно написать анализатор файлов и искать вызовы, но не все так прозрачно.
Возможно поможет вызвать debug-backtrace в самом конце?
arimanecro
Отправлено: 16 Марта, 2018 - 10:21:01
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
andrewkard пишет:
Возможно поможет вызвать debug-backtrace в самом конце?
Нет не поможет, потому что первая функция должна знать, если за ней идет другая ф-ия, то возвращает одно, если нет, то другое.
Может это где-то "завалялось" при парсинге, в синтксическом дереве или что-то в этом роде? туда как-то можно попасть?
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
arimanecro пишет:
$app->one()
возвращает объект, может это поможет?
Цитата:
method_exists — Checks if the class method exists
arimanecro
Отправлено: 16 Марта, 2018 - 11:16:28
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
andrewkard пишет:
method_exists — Checks if the class method exists
неее )
меня не интересует есть метод или нет, мне нужно знать, находится ли он в цепочке.
Ну я думаю и так понятно что я имею в виду, но все же, ещё немного уточню:
$app->one() -- оппа...я один значит верну только результат
$app->one()->two() -- оппа я не один, значит я не только отработаю, но и верну this
итд
Это получается тот же шаблон Билдер, но только там каждая функция возвращает this, а я хочу это контролировать.
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
Помог: 0 раз(а)
нет, вообще не то )
мне кажется в моем первом посте самое понятное объяснение.
===
вот как $app->one() поймет, идет за ним в стеке вызовов ещё один метод или он один в цепочке?
может на англ.яз будет понятливее,..из той ссылки, что я выше указал:
Цитата:
For instance, if I was to:
$Class->someFunction()->anotherFunction();
In anotherFunction() I can know what previous function was called using debug_backtrace(), but in my case, how can I know from someFunction() that anotherFunction() is going to be called next ? Is this possible in PHP ?
andrewkard
Отправлено: 16 Марта, 2018 - 12:47:48
Участник
Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014
Помог: 30 раз(а)
Абракадабра какая то, зачем это? Уверен что есть нормальные способы решения задачи без этого.
Ну да ладно, вызываем в методе someFunction debug_backtrace, берем линию, откуда он вызван, и файл, берем его содержимое, ищем эту строку, берем ее содержимое и смотрим что идет после вызова этого метода...
arimanecro
Отправлено: 16 Марта, 2018 - 13:44:10
Частый гость
Покинул форум
Сообщений всего: 209
Дата рег-ции: Май 2014
чтобы писать в таком синтаксисе, каждый метод должен возвращать this, ну кроме последнего, если он какой-то выводящий или запускающий.
А что если сделать так, чтобы в каждом методе не прописывать this и не зависеть от последовательности вызовов, то есть, в случае, если каждый метод возвращал this, то:
var_dump($app->one());// результат функции, например будет строка, а не возврат this, как выше
var_dump($app->one()->two());// ага, теперь one понимает, что он должен отработать, а также вернуть this(чего он не делал во второй строчке), чтобы запустился two. Далее two смотрит, если за ним идет three, то кроме отработки он вернет this и т.д по всей цепочке.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.