Parameters passed by references can have default values.
You can find out if a variable was actually passed by using func_num_args():
<?php
function refault( & $ref = 'Do I have to be calculated?'){
echo 'NUM ARGS: '. func_num_args()."\n";
echo "ORI VALUE: {$ref}\n";
if( func_num_args() > 0 ) $ref = 'Yes, expensive to calculate result: ' . sleep(1);
else $ref = 'No.';
echo "NEW VALUE: {$ref}\n";
}
$result = 'Do I have to be calculated?';
refault( $result );
echo "RESULT: {$result}\n";
// NUM ARGS: 1
// ORI VALUE: Do I have to be calculated?
// NEW VALUE: Yes, expensive to calculate result: 0
// RESULT: Yes, expensive to calculate result: 0
refault();
// NUM ARGS: 0
// ORI VALUE: Do I have to be calculated?
// NEW VALUE: No.
?>