47 votos

Tipo De Sugerencias: Los Parámetros Por Defecto

Tipo De Sugerencias

PHP 5 se presenta el Tipo de Indicaciones. Las funciones son ahora capaces de fuerza de los parámetros de los objetos (especificando el nombre de la clase en el prototipo de la función) o matrices (desde PHP 5.1). Sin embargo, si es NULL se utiliza como el valor por defecto del parámetro, será permitida como argumento para cualquier llame más tarde.


El siguiente extracto de la anterior:

si es NULL se utiliza como el valor por defecto del parámetro, será permitida como argumento para cualquier llame más tarde.

¿El por encima de la media:
si los parámetros por defecto que se utiliza uso con el tipo de sugerencias, puede tener sólo han NULL como valor predeterminado.

es decir, el código en code1 está mal y resultados en:
Fatal error: el valor por Defecto para los parámetros con un tipo de clase de sugerencia sólo puede ser NULL

code1:

 function setName ( string $name = "happ") {
  ...
  }

Donde como el código de code2 es correcto:

code2:

 function setName ( string $name = NULL) {
  ...
  }

¿Por qué esta restricción asignada en php?

82voto

Alex Howansky Puntos 16820

Usted no puede typehint cadenas, sólo puede typehint objetos y matrices, así que esto es incorrecto:

function setName ( string $name = "happ") {

(La razón por la que usted no consigue un error en tiempo de compilación aquí es porque PHP es la interpretación de "cadena" como el nombre de una clase.)

La redacción de la documentación que significa que si usted hace esto:

function foo(Foo $arg) {

A continuación, el argumento que se pasa a foo() debe ser una instancia de objeto Foo. Pero si haces esto:

function foo(Foo $arg = null) {

A continuación, el argumento que se pasa a foo() puede ser una instancia de objeto Foo, o null. Tenga en cuenta también que si haces esto:

function foo(array $foo = array(1, 2, 3))

A continuación, usted no puede llamar a foo(null). Si desea esta funcionalidad, usted puede hacer algo como esto:

function foo(array $foo = null) {
    if ($foo === null) {
        $foo = array(1, 2, 3);
    }

Edit: a partir de PHP 5.4, también puede typehint que se puede llamar:

function foo(callable $callback) {
    call_user_func($callback);
}

1voto

Chris Puntos 1437

Esta es una cuestión de tiempo de compilación versus el tiempo de ejecución de los valores. En la compilación sólo los valores literales (cadenas, números, booleanos y NULL) están permitidos. El procesador de PHP no puede saber acerca de todas las clases posibles en este momento y así no se puede crear una instancia de un objeto en los argumentos de la función.

Lo estoy esperando desde el pasaje es que, aunque normalmente pasar el valor NULL en un tipo insinuó función generará una Excepción/Error. Si establece un valor predeterminado como NULL entonces no tirar esta excepción si se pasa un valor NULL. Yo no lo he probado, solo lo que yo esperaría.

0voto

Muflix Puntos 164

intente esto

function setName ($name = "happ") {
  ...
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X