Operatorul ternar în PHP

Cu toții am folosit celebrul operator  ?: în PHP, corect? Dacă nu l-ai folosit încă, cu certitudine o să îl folosești.

Așadar, care este diferența dintre cele două metode?

  1. <?php
  2.  
  3. // varianta 1
  4. $temp = ( isset( $variabila ) ) ? $variabila : ' ';
  5.  
  6. // varianta 2 if ( isset( $variabila ) ){
  7.      $temp = $variabila;
  8. } else {
  9.      $temp = ' ';
  10. } ?>

Cele două bucăți de cod sunt identice, dar există o mică diferență de optimizare. Pentru date foarte mari, varianta a doua este mult mai rapidă. Iată și un mic scenariu de test:

  1. <?php
  2.  
  3. $data = str_repeat(' ', 9999999);
  4.  
  5. $time = microtime( true );
  6. for ( $i = 0; $i < 100; $i++){
  7.  $tmp = ( $data ) ? $data : ' ';
  8. }
  9. echo 'Short form: ' . ( microtime( true ) - $time )  ;
  10.  
  11. $time = microtime( true );
  12. for ( $i = 0; $i < 100; $i++){
  13.  if ( $data ){
  14.   $tmp = $data;
  15.  }else{
  16.   $tmp = '';
  17.  }
  18. }
  19. echo '<br />Long form: ' . ( microtime( true ) - $time ) ;
  20.  
  21. ?>
  22.  
  23. // Output:
  24. // Short form: 0.89477014541626
  25. // Long form: 0.0018050670623779

De ce? Atribuirea de mai jos nu copiază datele din $data.

  1. $tmp = $data;

În $tmp se pune o referință la memoria alocată pentru $data, iar informația din $data se copiază atunci când se efectuează modificări asupra variabilei $tmp. Însă, atribuirea prin operatorul ternar copiază datele la execuția acesteia. De aici reiese diferența la timp de execuție.

This entry was posted in Coding and tagged , , . Bookmark the permalink.

Lasă un răspuns