È una cattiva pratica emettere da una funzione?

6

Ad esempio, dovrei fare qualcosa del tipo:

<?php
function output_message($message,$type='success') {
  ?>
  <p class="<?php echo $type; ?>"><?php echo $message; ?></p>
  <?php
}
output_message('There were some errors processing your request','error');
?>

o

<?php
function output_message($message,$type='success') {
  ob_start();
  ?>
  <p class="<?php echo $type; ?>"><?php echo $message; ?></p>
  <?php
  return ob_get_clean();
}
echo output_message('There were some errors processing your request','error');
?>

Capisco che entrambi ottengono lo stesso risultato finale, ma ci sono benefici che vanno da una parte all'altra? O non importa nemmeno?

    
posta Nick 13.09.2012 - 11:35
fonte

2 risposte

17

Finché è chiaro dal nome, dai commenti e dalla firma della funzione che il suo scopo è generare output, non c'è niente di sbagliato in questo.

Ciò che non va bene è avere la generazione di output come effetto collaterale di una funzione che fa anche qualcos'altro (come calcolare e restituire alcuni dati, o scrivere un file), perché è una flagrante violazione del principio di responsabilità singola.

    
risposta data 13.09.2012 - 11:41
fonte
6

Se lo scopo della funzione è di output_message() , mi aspetto che il richiamo della funzione emetta effettivamente il messaggio.

Se d'altra parte, la funzione è stata chiamata generate_message() quindi non mi aspetto che faccia l'output:

<?php
function generate_error_message($message,$type='success') {
  ob_start();
  ?>
  <p class="<?php echo $type; ?>"><?php echo $message; ?></p>
  <?php
  return ob_get_clean();
}

echo generate_error_message('There were some errors processing your request','error');
?>

Ma sono certamente d'accordo con Michael sul fatto che una funzione dovrebbe generare solo un output relativo alla sua funzione

    
risposta data 13.09.2012 - 12:12
fonte

Leggi altre domande sui tag