Strategy-like Pattern in PHP

Today, I had some time to write a little program while I was watching people work on the infrastructure at the office. I wrote up a couple of functions that calculated the n-th Fibonacci number, and wanted to display the sequence of the first 100 numbers as they were calculated by these functions. At first, I had something like the following:

<?php

  for( $i = 1; $i < = 100; ++$i )
  {
     printf( "%d ", fibonacci_tabularized( $i ) );
  }

  for( $i = 1; $i < = 100; ++$i )
  {
     printf( "%d, ", fibonacci_iterative( $i ) );
  }

  for( $i = 1; $i < = 100; ++$i )
  {
     printf( "%d, ", fibonacci_recursive( $i ) );
  }

?>

I quickly realized how horrible it was. That sure is a lot of duplicate code! So, I ended up rewriting it so that it looks like this:

<?php

  function print_fibonacci_sequence( $strategy, $n )
  {
    for( $i = 1; $i < = $n; ++$i )
    {
      printf( "%d, ", $strategy($n) );
    }
    printf( "\r\n" );
  }

  $strategies = array(
    "fibonacci_tabularized",
    "fibonacci_iterative",
    "fibonacci_recursive"
  );

  foreach( $strategies as $strategy )
  {
    print_fibonacci_sequence( $strategy, 100 );
  }

?>

Questions, comments, and responses are welcomed and appreciated.

Leave a Reply