macos — PHP — это моя функция, вызываемая из echo или sprintf

Я хочу посмотреть, где вызывается функция.

Функция вызывается внутри echo или sprintf? Затем вернитесь, в противном случае просмотрите содержимое.

Я получил этот код (test.php):

<?php
function __($str = '')
{
// who is my parent?
$parent=debug_backtrace();

if ( isset ( $parent[1] ) )
$parent = $parent[1]['function']; //Did it!
else
$parent = debug_backtrace()[1]['function']; //Try

if ( empty ( $parent ) )
$parent = "ERROR!";

return sprintf("[%s] %s.%s", $parent, $str, PHP_EOL);
}

__('does nothing');
echo __('test from echo #1');
echo(__('test from echo #2'));
echo sprintf(__('test from sprintf #1'));
echo(sprintf(__('test from sprintf #2')));
?>

Когда я набираю его в терминале, я получаю только:

WDGMBP:Test Wes$ php test.php
[ERROR!] test from echo #1.
[ERROR!] test from echo #2.
[ERROR!] test from sprintf #1.
[ERROR!] test from sprintf #2.

(p.s. из Интернета то же самое)

Моя версия PHP:

WDGMBP:BIHappyV3 Wes$ php -v
PHP 5.5.27 (cli) (built: Aug 22 2015 18:20:44)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

-1

Решение

Вы не понимаете, как debug_backtrace работает. Он возвращает функции, которые выполнялись для вызова, а не функцию, которая будет вызвана с результатом. Например. если у вас есть:

function testit() {
someFunc(__('something'));
}

затем $parent[1]['function'] будет содержать testitне someFunc,

Я не думаю, что есть какой-то способ получить someFunc, Эта функция не находится нигде в стеке, потому что она не вызывается до после __() возвращается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]