title: What function argument property allows for this odd overloading?
body: <p>I'm not sure what exactly this kind of parameter list behavior is called, so it's difficult to search for more info. I will draw an example:<br>
      
  
  <pre><code>function echoThis( $a=NULL, $b=NULL, $c=NULL )
  {
      if( $a != NULL )
          echo "A is not NULL; it is: " . $a . "\n";
      if( $b != NULL )
          echo "B is not NULL; it is: " . $b . "\n";
      if( $c != NULL )
          echo "C is not NULL; it is: " . $c . "\n";
  
  }
  
  function echoThat( $a=NULL, $b=NULL, $c=NULL )
  {
      if( $a != NULL )
          echo "A is not NULL; it is: " . $a . "\n";
      elseif( $b != NULL )
          echo "B is not NULL; it is: " . $b . "\n";
      elseif( $c != NULL )
          echo "C is not NULL; it is: " . $c . "\n";
      else
          echo "Huh?\n";
  
  }
  
  $a = "hello";
  $b = "how are you";
  $c = "goodbye";
  
  echoThis( $a );
  echoThis( $a, $b );
  echoThis( $a, $b, $c );
  echo "--------\n";
  echoThat( $a );
  echoThat( $a, $b );
  echoThat( $a, $b, $c );
  echo "--------\n";
  echoThis( $a );
  echoThis( $b, $a );
  echoThis( $c, $b, $a );
  echo "--------\n";
  echoThat( $a );
  echoThat( $b, $a );
  echoThat( $c, $b, $a );
  echo "--------\n";
  echoThis( $a );
  echoThis( $b );
  echoThis( $c );
  echo "--------\n";
  echoThat( $a );
  echoThat( $b );
  echoThat( $c );
  
  ?&gt;
  </code></pre>
  
  <p>So, no matter the order of the variables passed it will fill out the internal scoped variables as if the first was $a and second $b and last $c, but if only one argument is supplied, it somehow matches the variable name to the correct internally scoped variable. So if only $c is passed, it skips $a and $b and knows to assign it to $c.  </p>
  
  <pre><code>A is not NULL; it is: hello  
  A is not NULL; it is: hello  
  B is not NULL; it is: how are you  
  A is not NULL; it is: hello  
  B is not NULL; it is: how are you  
  C is not NULL; it is: goodbye  
  --------  
  A is not NULL; it is: hello  
  A is not NULL; it is: hello  
  A is not NULL; it is: hello  
  --------  
  A is not NULL; it is: hello  
  A is not NULL; it is: how are you  
  B is not NULL; it is: hello  
  A is not NULL; it is: goodbye  
  B is not NULL; it is: how are you  
  C is not NULL; it is: hello  
  --------  
  A is not NULL; it is: hello  
  A is not NULL; it is: how are you  
  A is not NULL; it is: goodbye  
  --------  
  A is not NULL; it is: hello  
  A is not NULL; it is: how are you  
  A is not NULL; it is: goodbye  
  --------  
  A is not NULL; it is: hello  
  A is not NULL; it is: how are you  
  A is not NULL; it is: goodbye  
  </code></pre>
  
  <p>What is this called, so that I can find more information? (Or is this considered a bad practice? The most insteresting to me are the middle two stanzas produce different results, and the last two all fire using the first if statement even the value in the variable is correctly mapped (i think).</p>