In other words - an optional parameter.
Actually - no.
The question mark indicates that the parameter must be either null or the specified type. But let him not
function test (?stdClass $obj) { // some code } test(new stdClass); // ok test(null); //ok test(); // error
In the example in the question parameter is really optional, as indicated by the default value.