Starting with 7.1 there is a type hinting for nullable parameters
function func(?Object $object) {}
It will work for these cases:
func(null); //as nullable parameter
func(new Object()); // as parameter of declared type
But for optional value signature should look like.
function func(Object $object = null) {} // In case of objects
function func(?Object $object = null) {} // or the same with nullable parameter
function func(string $object = '') {} // In case of scalar type - string, with string value as default value
function func(string $object = null) {} // In case of scalar type - string, with null as default value
function func(?string $object = '') {} // or the same with nullable parameter
function func(int $object = 0) {} // In case of scalar type - integer, with integer value as default value
function func(int $object = null) {} // In case of scalar type - integer, with null as default value
function func(?int $object = 0) {} // or the same with nullable parameter
than it can be invoked as
func(); // as optional parameter
func(null); // as nullable parameter
func(new Object()); // as parameter of declared type