Ho una function ( 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.
Puoi utilizzare le 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); ?>
Produrrà:
string(6) "Hello " string(11) "Hello World"
Puoi farlo usando le funzioni di buffering dell'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;
Forse puoi refactorizzare 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 devi toccare il codice altrove nella tua applicazione.
Controlla il buffer di output , ma preferirei cambiare la function ora che sembra che verrà usata per due cose. Semplicemente restituire la string sarebbe la cosa migliore.