имя функции ($ param, $ line = __LINE__, $ file = __FILE__) {}; - PullRequest
6 голосов
/ 02 августа 2010

Возможно ли, чтобы функция автоматически содержала номер строки и файл, в который была вызвана функция,

, как если бы я вызывал __LINE__ или __FILE__ в функции, которая будет использовать строкуи файл определения функции находится в.

, но я не хочу каждый раз передавать __LINE__ и __FILE__ в функцию.

, так что если я установлю их в качестве параметров по умолчаниюони взяты из определения функции или откуда она вызывается?

Ответы [ 4 ]

5 голосов
/ 02 августа 2010

Выполнение того, что вы предлагаете, похоже, не работает.

Вы можете сделать это так, но я не уверен, почему вы хотите это сделать, и что нет лучшего подхода к тому, чтовы пытаетесь достичь - см. ответ Wrikken .

<?php

function test() {
    $backtrace = debug_backtrace();
    $last = $backtrace[0];
    echo "{$last['function']}() called from {$last['file']} line {$last['line']}\r\n"; 
}



test();
4 голосов
/ 02 августа 2010

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

0 голосов
/ 08 февраля 2016

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

0 голосов
/ 02 августа 2010

Если вы хотите использовать эту информацию в каком-либо сообщении об ошибке, есть функция trigger_error(), которая выдаст собственную ошибку PHP, поэтому она будет отображаться обычным способом PHP - с именем файла, номером строки и предоставленный текст.

Наиболее удобная функция этой функции работает в соответствии с текущими настройками обработки ошибок:

ini_set('display_errors',1);
trigger_error("Horrible bug found!");

выведет на экран сообщение об ошибке, подобное этому:

Notice: Horrible bug found! in /path/file.php on line 2

очень удобно для разработки
пока этот код

ini_set('display_errors',0);
ini_set('log_errors',1);
trigger_error("Horrible bug found!");

будет занесено в журнал ошибок для дальнейшего использования
обязательный для производства

...