Home > Blockchain >  In PHP, what is the difference between the following function definitions?
In PHP, what is the difference between the following function definitions?

Time:01-20

function some_func(string|null $some_arg)

function some_func(?string $some_arg)

function some_func(string $some_arg = null)

function some_func(?string $some_arg = null)

CodePudding user response:

The string|null union type actually converts to ?string, so they are equivalent.

$string = null (regardless of preceding type definition) sets a default value and makes the $string argument optional. This allows you to use some_func() without an argument, which will be interpreted as some_func(null).

So ultimately not much, and syntax here will depend on the usage of some_func.

Edit:

As pointed out in a now-deleted comment, this one seems fishy:

function some_func(string $some_arg = null)

You'd think string and the default value of null don't play well, but this actually converts correctly to

function some_func(?string $some_arg = null)

So while odd, it is valid.

CodePudding user response:

The first definition, "function some_func(string|null $some_arg)", indicates that the function expects a parameter of type "string" or "null" for the variable "$some_arg". This is using the pipe symbol "|" to specify that the parameter can be either a string or null.

The second definition, "function some_func(?string $some_arg)", indicates that the function expects an optional parameter of type "string" or "null" for the variable "$some_arg". This is using the question mark symbol "?" before the type to specify that the parameter is optional.

The third definition, "function some_func(string $some_arg = null)", indicates that the function expects a parameter of type "string" for the variable "$some_arg", and that the parameter has a default value of "null".

The fourth definition, "function some_func(?string $some_arg = null)", indicates that the function expects an optional parameter of type "string" or "null" for the variable "$some_arg" and that the parameter has a default value of "null".

  • Related