The signature of a function is the declaration of it:
The above signature (not PHP, but this is important to know in order to understand signatures) says that I have a function, called 'myfunc', that has 1 parameter which is an integer. It returns nothing. It is accessible from out of scope (an object oriented process which is the public, though procedural has their own set like static).
public void myfunc(int i);
PHP is more lenient since it is a datatype weak language.
Is a function that returns RETURNVAL (think of it as 'if' our function returns a result, it will be that value, otherwise it is null), takes a single required zval type variable called product_id (every variable in PHP is a zval or derivitive), and is available in every scope.
Modifying the signature is when you change the declaration of the function to a different name, return type, scope, number of parameters, or type of parameters. Some languages can overload these, so you can share the function name over different signatures. PHP cannot overload, but instead allows optional variable.
In order to get $layout into your function, you need to modify the signature and everything that calls it.
And called with
function product_exists($product_id, $layout)
$result = product_exists($someProdID, $someLayoutVar);