Как я могу проверить, что моя функция печатает/эхо?
Я часто использую 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";
}
Ответы
Ответ 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
Ответ 4
Вы можете использовать var_dump()
и die()
для более эффективного отладки кода.
$test = "debud test";
public function MyFunc($test)
{
// some code...
var_dump($test); die();
// some code...
}
Ссылка:
http://php.net/manual/en/function.var-dump.php
http://php.net/manual/en/function.die.php
Ответ 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;
}