2009-08-04 18 views
11

¿Esto es legal?Usar constantes como valores de función predeterminados en PHP

<?php 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
     //lots_of_awesome_code 
} 

?> 

donde MENU_DEFAULT_VALUE y ODP_DEFAULT_VALUE son constantes definidas previamente en el archivo.

+2

Sí, pero tenía problemas en una función que usa esto y pensé que quizás era técnicamente posible pero en contra de las mejores prácticas. –

Respuesta

18

Sí, eso es legal.

De the manual:

valor El valor predeterminado debe ser un expresión constante, no (por ejemplo) una variable , un miembro de la clase o una función llamada.

Las constantes se ajustan a la perfección.

+0

¿Alguna razón/documentación por no poder referirse a la constante usando '' 'static''' pero solo a través de' '' self''', al establecer los valores predeterminados para un argumento de método de clase? – Kamafeather

10

¿por qué no lo intentas?

Sin embargo, en caso de que pueda probar en este momento, el siguiente código:

define('MENU_DEFAULT_VALUE', 10); 
define('ODP_DEFAULT_VALUE', 'hello'); 

function ftw($foo = 'pwnage', $nub = MENU_DEFAULT_VALUE, $odp = ODP_DEFAULT_VALUE) { 
    var_dump($foo); 
    var_dump($nub); 
    var_dump($odp); 
} 

ftw(); 

da este resultado:

string 'pwnage' (length=6) 
int 10 
string 'hello' (length=5) 

así que diría que sí, es válido: -)

+0

En el contexto de un método de clase, descubrí que no es posible hacer referencia a la constante mediante '' 'static''', sino simplemente con' '' self'''; este '' 'myMethod ($ arg1 = static :: MY_CONST)' '' no funcionará. ¿Conoces alguna explicación válida para este comportamiento diferente? – Kamafeather

8

En un contexto de OOP, también puede usar una constante de miembro de clase como valor de argumento de método predeterminado.

class MyClass 
{ 
    const A = 1; 

    public function __construct($arg = self::A) 
    { 
     echo $arg; 
    } 
} 
Cuestiones relacionadas