2011-08-17 9 views
14

Ho una funzione (DoDb::printJsonDG($sql, $db, 1000, 2)) che echos json. Devo prenderlo e quindi utilizzare str_replace() prima che venga inviato all'utente. Tuttavia non posso impedirgli di fare eco. Non voglio cambiare printJsonDG perché è utilizzato in molte altre posizioni.Come prevenire echo in PHP e catturare ciò che è dentro?

risposta

41

È possibile utilizzare le funzioni ob_start() e ob_get_contents() in PHP.

<?php 

ob_start(); 

echo "Hello "; 

$out1 = ob_get_contents(); 

echo "World"; 

$out2 = ob_get_contents(); 

ob_end_clean(); 

var_dump($out1, $out2); 
?> 

uscita sarà:

string(6) "Hello " 
string(11) "Hello World" 
1

Partenza output buffering, ma preferirei cambiare la funzione, ora che sembra che sarà utilizzato per due cose. Semplicemente restituire la stringa sarebbe la cosa migliore.

5

È possibile farlo utilizzando le funzioni di buffer di output.

ob_start(); 

/* do your echoing and what not */ 

$str = ob_get_contents(); 

/* perform what you need on $str with str_replace */ 

ob_end_clean(); 

/* echo it out after doing what you had to */ 

echo $str; 
4

Forse si può refactoring DoDb:

class DoDb 
{ 
    public static function getJsonDG($some, $parameters) 
    { 
     /* 
      original routine from printJsonDG without the print statement 
     */ 

     return $result; 
    } 

    public static function printJsonDG($some, $parameters) 
    { 
     print self::getJsonDG($some, $parameters); 
    } 
} 

In questo modo non c'è bisogno di toccare il codice altrove in te applicazione.