2011-07-11 13 views

Respuesta

12

De acuerdo con el manual de unset:

Si una variable que se pasa por referencia no está definida() dentro de una función solamente, la variable local es destruida La variable en el entorno de llamadas conservará el mismo valor que antes de llamar a unset() .

Supongo que este es el problema que está teniendo. Por lo tanto, mi sugerencia es simplemente establecer $argument en NULL. Lo cual, de acuerdo con el NULL docs, "eliminará la variable y descontará su valor".

Por ejemplo: $argument = NULL;

+0

lo hice: función if_exist (& $ argumento, por defecto = $ '') { \t if (isset ($ argumento)) \t { \t \t echo $ argumento; \t} \t demás \t { \t \t echo $ predeterminado; \t} \t $ argumento = NULL;} pero sigue sin suerte, resultado es igual que antes :( –

+0

@Pawan: Esta puede ser. posible en su situación, no estoy seguro, pero ¿qué tal simplemente dejarlo en blanco (es decir. '$ argument = '';') y luego, en lugar de verificar si está configurado, verifique si está en blanco. Esto, por supuesto, depende de si una cadena en blanco es un valor válido. –

2

$default se pasa por valor, por lo que no se puede deshacer (excepto en el ámbito local).

Como indudablemente descubrió, unset() simplemente desmarca la referencia a $argument. Usted puede (tipo de) unset $argument así:

$argument = null; 
+0

Asignación a NULL no es exactamente lo mismo que unsetting que, a pesar de que significa 'isset()' dará el mismo resultado de cualquier manera. Pero supongo que será suficiente, ya que no puedes hacer lo mismo al llamar 'unset()' de todos modos. – BoltClock

+0

lo hice también, pero todavía no tuve suerte, ni $ argument ni $ default están siendo desarmados. :( –

+0

@Pawan Choudhary: ¿Puede mostrar su nuevo código en su publicación original y mostrar cómo comprobó si las variables se establecieron? –

1

la única manera de hacer esto con una función está utilizando variables globales.

//To unset() a global variable inside of a function, 
// then use the $GLOBALS array to do so: 

<?php 
function foo() 
{ 
    unset($GLOBALS['bar']); 
} 

$bar = "something"; 
foo(); 
?> 
Cuestiones relacionadas