Php название текущей функции

Получить строку кода и файл, который выполняет текущую функцию в PHP?

Я хочу изменить функцию журнала так, чтобы она создавала следующее:

test (файл: File1.php, номер строки: 3)

Итак, любой способ получить имя файла и номер строки кода, выполняющего текущую функцию в PHP?

EDIT для комментариев использования комментариев: когда я использую backlog в моем объектно-ориентированном способе программирования, у меня есть следующая ситуация.

Этот пример будет возвращен как файл «Index.php», а как строка номер 4, здесь начинается класс. Тем не менее, предполагается вернуть файл TestClass.class.php и номер строки 6. Есть идеи, как это исправить?

Solutions Collecting From Web of «Получить строку кода и файл, который выполняет текущую функцию в PHP?»

Вы можете использовать debug_backtrace ().

Таким образом, в вашей функции журнала вы сможете получить имя файла и номер строки, с которого была вызвана функция журнала.

Я использую этот подход в своих классах ведения журнала, и он значительно сократил объем кода, необходимый для получения значимых данных журнала. Другим преимуществом будет читаемость. Магические константы, как правило, становятся довольно уродливыми, когда их смешивают со струнами.

debug_backtrace () может использоваться для трассировки в стек вызовов. Это может быть медленным, поэтому будьте осторожны с ним, если вы делаете много записей.

Если вы используете PHP 5.3, вы можете воспользоваться поздней статической привязкой и иметь метод базового класса log() , и ваши дочерние классы могли бы вызвать его, но при этом сохранять статические ссылки на __FILE__ и __LINE__ .

Окончательный вариант будет просто передавать __FILE__ и __LINE__ в качестве параметров при вызове функции log() .

Это старый вопрос, но, видя, как мое решение не здесь, я предоставлю его потомству

 try< throw new Exception(); >catch ( Exception $e )< $trace = $e->getTrace(); > $length = 0; foreach ($trace as $t) < if( $t['file'] != __FILE__ )< break; >++$length; > return array_slice( $trace, ($length - count( $trace ) )); 

Вы можете бросить / поймать, чтобы получить чистую трассировку стека, тогда вам нужно искать первую строку, содержащую этот файл (обычно это то, откуда он вызывается), вы также можете использовать индекс трассы, если вы это знаете, или функция.

Трассировка стека исключений почти такая же, как и debug_backtrace(true) .

  • Диаграммы Google – анимация графического графика не работает
  • как передать URL-адрес переменной на следующие страницы в разбивке на страницы php
  • Как я могу ввести доктрину в службу Symfony2
  • Почему curl_multi_exec () не выполняет мои скрипты вообще?
  • PHP money_format
  • Как увеличить числовую часть строки на единицу?
  • является ли определение типа mime лучшим способом для обнаружения своего рода файла?
  • Как безопасно записывать данные JSON в файл с помощью PHP
  • PHP и одновременный доступ к файлам
  • Плагин PHPExcel не импортирует файл в cakephp
  • Отправить письмо по электронной почте в Codeignign с помощью Gmail
  • Установите PEAR с Wamp 2.1
  • PHP getimagesize с переменной
  • Проблема Xdebug и Netbeans
  • PHP: неизменные поля публичных пользователей
Читайте также:  Html attribute font size

Источник

Php название текущей функции

PHP предоставляет большой список предопределённых констант для каждого выполняемого скрипта. Многие из этих констант определяются различными модулями и будут присутствовать только в том случае, если эти модули доступны в результате динамической загрузки или в результате статической сборки.

User Contributed Notes 8 notes

the difference between
__FUNCTION__ and __METHOD__ as in PHP 5.0.4 is that

__FUNCTION__ returns only the name of the function

while as __METHOD__ returns the name of the class alongwith the name of the function

class trick
function doit()
echo __FUNCTION__;
>
function doitagain()
echo __METHOD__;
>
>
$obj=new trick();
$obj->doit();
output will be —- doit
$obj->doitagain();
output will be —— trick::doitagain

The __CLASS__ magic constant nicely complements the get_class() function.

Sometimes you need to know both:
— name of the inherited class
— name of the class actually executed

Here’s an example that shows the possible solution:

class base_class
function say_a ()
echo «‘a’ — said the » . __CLASS__ . «
» ;
>

function say_b ()
echo «‘b’ — said the » . get_class ( $this ) . «
» ;
>

class derived_class extends base_class
function say_a ()
parent :: say_a ();
echo «‘a’ — said the » . __CLASS__ . «
» ;
>

function say_b ()
parent :: say_b ();
echo «‘b’ — said the » . get_class ( $this ) . «
» ;
>
>

$obj_b -> say_a ();
echo «
» ;
$obj_b -> say_b ();

?>

The output should look roughly like this:

‘a’ — said the base_class
‘a’ — said the derived_class

‘b’ — said the derived_class
‘b’ — said the derived_class

If you’re using PHP with fpm (common in this day and age), be aware that __DIR__ and __FILE__ will return values based on the fpm root which MAY differ from its actual location on the file system.

This can cause temporary head-scratching if deploying an app where php files within the web root pull in PHP files from outside of itself (a very common case). You may be wondering why __DIR__ returns «/» when the file itself lives in /var/www/html or whathaveyou.

Читайте также:  Including fonts in css

You might handle such a situation by having NGINX explicitly add the necessary part of the path in its fastcgi request and then you can set the root on the FPM process / server / container to be something other than the webroot (so long as no other way it could become publicly accessible).

Hope that saves someone five minutes who’s moving code to FPM that uses __DIR__.

You cannot check if a magic constant is defined. This means there is no point in checking if __DIR__ is defined then defining it. `defined(‘__DIR__’)` always returns false. Defining __DIR__ will silently fail in PHP 5.3+. This could cause compatibility issues if your script includes other scripts.

echo ( defined ( ‘__DIR__’ ) ? ‘__DIR__ is defined’ : ‘__DIR__ is NOT defined’ . PHP_EOL );
echo ( defined ( ‘__FILE__’ ) ? ‘__FILE__ is defined’ : ‘__FILE__ is NOT defined’ . PHP_EOL );
echo ( defined ( ‘PHP_VERSION’ ) ? ‘PHP_VERSION is defined’ : ‘PHP_VERSION is NOT defined’ ) . PHP_EOL ;
echo ‘PHP Version: ‘ . PHP_VERSION . PHP_EOL ;
?>

Output:
__DIR__ is NOT defined
__FILE__ is NOT defined
PHP_VERSION is defined
PHP Version: 5.3.6

Just learned an interesting tidbit regarding __FILE__ and the newer __DIR__ with respect to code run from a network share: the constants will return the *share* path when executed from the context of the share.

// normal context
// called as «php -f c:\test.php»
__DIR__ === ‘c:\’;
__FILE__ === ‘c:\test.php’;

// network share context
// called as «php -f \\computerName\c$\test.php»
__DIR__ === ‘\\computerName\c$’;
__FILE__ === ‘\\computerName\c$\test.php’;

NOTE: realpath(‘.’) always seems to return an actual filesystem path regardless of the execution context.

Note a small inconsistency when using __CLASS__ and __METHOD__ in traits (stand php 7.0.4): While __CLASS__ is working as advertized and returns dynamically the name of the class the trait is being used in, __METHOD__ will actually prepend the trait name instead of the class name!

A lot of notes here concern defining the __DIR__ magic constant for PHP versions not supporting the feature. Of course you can define this magic constant for PHP versions not yet having this constant, but it will defeat its purpose as soon as you are using the constant in an included file, which may be in a different directory then the file defining the __DIR__ constant. As such, the constant has lost its *magic*, and would be rather useless unless you assure yourself to have all of your includes in the same directory.

Читайте также:  Spacing and Line Height

Concluding: eye catchup at gmail dot com’s note regarding whether you can or cannot define magic constants is valid, but stating that defining __DIR__ is not useless, is not!

There is no way to implement a backwards compatible __DIR__ in versions prior to 5.3.0.

The only thing that you can do is to perform a recursive search and replace to dirname(__FILE__):
find . -type f -print0 | xargs -0 sed -i ‘s/__DIR__/dirname(__FILE__)/’

Источник

PHP ПОЛУЧИТЬ НАЗВАНИЕ ФУНКЦИИ

Для получения названия функции в PHP можно использовать встроенную функцию `function_name()`. Она возвращает строку с именем текущей функции. Однако, если ее вызвать вне функции, она вернет ошибку. Более универсальным и надежным способом получения названия текущей функции является использование магической константы `__FUNCTION__`. Она возвращает имя текущей функции, даже если ее вызвать вне функции. Пример кода: function get_function_name() <
return __FUNCTION__;
>
echo get_function_name(); // выведет «get_function_name» В данном примере функция `get_function_name()` возвращает имя текущей функции с помощью константы `__FUNCTION__`. Далее мы вызываем эту функцию и выводим ее название с помощью функции `echo`. Если требуется получить имя функции во время выполнения программы, можно использовать функцию `debug_backtrace()`. Она возвращает массив с информацией о текущем контексте выполнения программы, включая вызвавшую функцию. Пример кода: function get_calling_function_name() <
$trace = debug_backtrace();
if(isset($trace[1][‘function’])) <
return $trace[1][‘function’];
>
return »;
>
function my_function() <
echo get_calling_function_name(); // выведет «my_function»
>
my_function();
В данном примере функция `get_calling_function_name()` использует функцию `debug_backtrace()` для получения массива с информацией о текущем контексте выполнения программы. Затем она проверяет, вызвана ли функция из другой функции, и если да, возвращает ее имя. В примере мы сначала определяем функцию `my_function()`, которая вызывает функцию `get_calling_function_name()`. При вызове `my_function()` будет выведено имя функции с помощью функции `echo`.

Уроки PHP #8 Функции для работы с датой и временем

Функции PHP и с чем их едят!

Function (функции) php. Как создать и как пользоваться.

Уроки PHP для начинающих / #10 – Функции. Область видимости

#12 Уроки PHP — Учим язык PHP, Области видимости переменных класса

Объявление и вызов функции в PHP — Базовый курс PHP-7

Вычисляем по IP. Какие данные можно вытянуть из ip адреса с помощью PHP? Разбираемся, выводим

Урок 5. PHP. Встроенные функции PHP.

Источник

Оцените статью