Подтвердить что ты не робот

Как я могу проверить, что моя функция печатает/эхо?

Я часто использую echo для отладки функционального кода:

public function MyFunc() {

    // some code...
    echo "OK";
    // some code...

}

Как я могу проверить, что моя функция печатает/эхо-то?

(псевдокод):

MyFunc();

if (<when something was printed>){
    echo "You forgot to delete echo calls in this function";
}
4b9b3361

Ответ 1

Это должно сработать для вас:

Просто вызовите свои функции, в то время как вы буферизация вывода, и проверьте, пусто ли содержимое, например.

ob_start();

//function calls here
MyFunc();

$content = ob_get_contents();

ob_end_clean();

if(!empty($content))
    echo "You forgot to delete echos for this function";

Ответ 2

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

define('DEBUGMODE', true); // somewhere high up in a config

function debuglog($msg){
    if( DEBUGMODE ){ echo $msg; }
}

Если вы когда-нибудь захотите избавиться от своих отладочных эхо, вы можете выполнить поиск "debuglog(" и удалить эти строки кода. Таким образом, вы случайно не удалите любые эхо-инструкции, которые требуются при обычном выполнении, или пропустите любые отладочные эхо-инструкции, которые действительно должны были быть удалены.

Ответ 3

Это плохой способ проверить, что-то повторяется.

Вы можете установить переменную с именем is_echoed в 1 или вы можете вернуть значение

public $is_echoed = 0;
//rest
$this->is_echoed = 1;

или

function myFunc()
{
  return "OK";
}
if(myFunc() == 'OK')
     //rest

Ответ 5

Почему вы хотите попробовать такой обширный процесс, чтобы увидеть, что что-то повторилось или нет?

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

function xyz () {

     if (something) return some_value;
     else return some_other_value;
}

Нет особой необходимости иметь переменные и использовать пространство для хранения 0 или 1, когда вы можете просто вернуть стробированный литерал.

Ответ 6

Я предлагаю вам использовать что-то вроде log4php [1]

Но если нет, я использую такую ​​функцию:

define('DEBUG', true);
function debug($msg){
    if(DEBUG){ echo $msg; }
}

Или что-то подобное, чтобы увидеть войти в браузер:

function debug_to_console( $data ) {

    if ( is_array( $data ) )
        $output = "<script>console.log( 'Debug Objects: " . implode( ',', $data) . "' );</script>";
    else
        $output = "<script>console.log( 'Debug Objects: " . $data . "' );</script>";

    echo $output;
}