Estaba investigando un poco pero no pude encontrar una respuesta (probablemente porque no la busqué bien)
Considere esta pieza de código:
public function foo(?array $optionalParam);Y luego este:
public function foo(array $optionalParam = null); ¿Qué difiere entre ellos? Usando PHPstorm noté que cuando uso el ? , crea un PHPdoc y marca el tipo de variable como type|null . Pero cuando llamo a la función sin ese argumento, PHP me grita en la cara "¿estás bromeando? ¿Dónde está $OptionalParam?". Por otro lado, logré usar sin problemas la opción =null .
Lo siento si esta pregunta es demasiado simple, pero no encontré ninguna respuesta en línea.
En primer lugar, el ? va antes del tipo, no después... aparte de esto:
Usando
public function foo(?array $optionalParam); se ve obligado a pasar algo, que puede ser null o una array , de hecho:
<?php function foo(?array $optionalParam){ echo "test"; } foo(); // doesn't work foo(null); // works foo([]); // worksdonde en lugar de usar
public function foo(array $optionalParam = null); aceptará null , una array o 0 parámetros
<?php function foo(array $optionalParam = null){ echo "test"; } foo(null); // works foo(); // work foo([]); // worksEs una característica de PHP 7.1 llamada Tipos anulables
Las dos líneas que escribiste son idénticas.
array ?$optionalParam : either an array or null array $optionalParam = null : either an array or null Aunque usando ? aún necesitaría agregar el parámetro al llamar a la función.