It was mooted to have non-static initialisers as default values, but it was deemed that That Way Madness Lay. What I generally do is use a totally bogus value for the default and check that. Doubly good if even the type is invalid, and checking with ===.
null is a good choice when null would be a "totally bogus value" to pass:
function showMonth($return=FALSE, $mon=null, $yr=null){
if($mon===null) $mon = date('m');
if($yr===null) $yr = date('Y');
As a bonus you can have (and this is a pretty artificial example):
$months = array(1, 2, null, 6);
foreach($months as $month)
showMonth($return, $month);
And get months shown for (at the time of writing) January, February, December, and June. In short, you can treat "default behaviour" as just another value you can pass.