2011-08-16 11 views
22

Acabo de notar que PHP tiene un tipo de conversión a (unset), y me pregunto para qué podría usarse. Ni siquiera realmente desarma la variable, simplemente la envía a NULL, lo que significa que (unset)$anything debe ser exactamente lo mismo que simplemente escribir NULL.¿Alguien alguna vez usó el molde de PHP (unset)?

# Really unsetting the variable results in a notice when accessing it 
[email protected]:~$ php -r '$foo = 123; unset($foo); echo $foo;' 
PHP Notice: Undefined variable: foo in Command line code on line 1 
PHP Stack trace: 
PHP 1. {main}() Command line code:0 

# (unset) just set it to NULL, and it doesn't result in a notice 
[email protected]:~$ php -r '$foo = 123; $foo=(unset)$foo; echo $foo;' 

¿Alguien alguna vez lo usó para algo? No puedo pensar en cualquier uso posible para que ...

Agregado:
La idea principal de la pregunta es:
¿Cuál es la razón para usar (unset)$smth en lugar de sólo NULL?

Respuesta

14

Por lo que yo puedo decir, no hay realmente ningún punto de utilizar

$x = (unset)$y; 

sobre

$x = NULL; 

El (unset)$y da siempre como resultado nulo, ya diferencia de llamar unset($y), el elenco no lo hace afectar $y en absoluto.

La única diferencia es que el uso del elenco aún generará un aviso de "variable no definida" si $y no está definido.

Hay una PHP bug sobre un tema relacionado. El error se trata en realidad de un pasaje (en mi opinión) engañoso en otra parte de la documentación que dice:

Al convertir una variable en nulo, se eliminará la variable y se descontará su valor.

Y eso claramente no es el caso.

+0

Bueno encontrar esa generación de aviso. Para esa perspectiva, en realidad podría ser bastante útil en algunos lugares. – Smar

+0

Estoy bastante sorprendido de ver una característica completamente inútil en PHP ... Me pregunto qué estaban pensando cuando lo agregaron. Pensé que me podría estar perdiendo algo ...pero creo que es completamente inútil después de todo – shesek

+0

El comportamiento de aviso abre la puerta a, por ejemplo, el registro de que una variable no estaba definida a pesar de que no le importa su valor. Sin embargo, por la parte superior de mi cabeza, no puedo pensar en un caso de uso para esa habilidad. La única otra cosa en la que puedo pensar es que podría usarse como una especie de edición de "taquigrafía" para reemplazar un valor por nulo, pero que todavía tenga alguna noción en el código de cuál era el valor en ese lugar. –

6

supongo (saber PHP y es ... notaribly opciones interesantes para diferentes cosas, que pueden ser completamente equivocado) que es por lo que el valor no es necesario establecer a una var. Por razón exacta pueda usarlo para un código, no puedo pensar en un ejemplo, pero algo como esto:

$foo = bar((unset) baz()); 

Hay que desea o necesita tener null como argumento para la barra y todavía tiene que llamar demasiado baz() . La sintaxis de la función ha cambiado y alguien hizo una corrección de cinta de pato, como lo que parece estar caliente con PHP.

Así que diría: no hay razón para usarlo en la arquitectura bien pensada; podría usarse para soluciones que son tan oscuras que votaría en contra de ellas en primer lugar.

+3

No tengo idea de por qué querría encadenar llamadas de función de esta manera si siempre quiere pasar 'null' a' bar' en primer lugar ... – deceze

1

Por ejemplo, se puede utilizar como esto

function fallback() 
{ 
    // some stuff here 
    return 'zoo'; 
} 

var_dump(false ? 'foo' : fallback()); // zoo 
var_dump(false ? 'foo' : (unset) fallback()); // null 

Incluso si fallback() devuelve "zoológico" (unset) aclarará ese valor.

Cuestiones relacionadas