2011-08-16 12 views
22

Właśnie zauważyłem, że PHP ma typ odlewania do (unset) i zastanawiam się, do czego może być przeznaczony. To tak naprawdę nie rozbraja zmiennej, po prostu rzuca ją na NULL, co oznacza, że ​​(unset)$anything powinno być dokładnie takie samo jak po prostu pisanie NULL.Ktoś kiedyś użył odlewania 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;' 

Ktoś kiedyś użył go do czegokolwiek? Nie mogę myśleć o ewentualnej użytkowania dla niego ...

Dodano:
Ideą pytanie brzmi:
Jaki jest powód, aby korzystać (unset)$smth zamiast tylko NULL?

Odpowiedz

14

O ile mogę powiedzieć, że naprawdę nie ma sensu do korzystania

$x = (unset)$y; 

nad

$x = NULL; 

(unset)$y zawsze ma wartość null, iw przeciwieństwie do wywoływania unset($y), obsada nie Wpływa na $y w ogóle.

Jedyna różnica polega na tym, że użycie rzutowania nadal generuje powiadomienie "niezdefiniowana zmienna", jeśli nie zdefiniowano $y.

Istnieje jeden problem związany z numerem PHP bug. Błąd dotyczy w rzeczywistości (moim zdaniem) mylącego fragmentu w innym miejscu dokumentacji, który mówi:

Przesłanie zmiennej na wartość null spowoduje usunięcie zmiennej i anulowanie jej wartości.

I tak wyraźnie nie jest.

+0

Dobrze znajdź tę generację ogłoszeń. Dla tej perspektywy może być całkiem przydatna w niektórych miejscach. – Smar

+0

Jestem dość zaskoczony, widząc całkowicie bezużyteczną funkcję w PHP ... Zastanawiam się, co myśleli, kiedy dodali. Myślałem, że może czegoś brakuje ...ale wydaje mi się, że jest całkowicie bezużyteczny. – shesek

+0

Zachowanie informacyjne otwiera drzwi do, powiedzmy, rejestrowania, że ​​zmienna była niezdefiniowana, nawet jeśli nie zależy Ci na jej wartości. Poza tym nie mogę wymyślić przypadku użycia tej umiejętności. Jedyne, co mogę sobie wyobrazić, to to, że może być użyty jako swego rodzaju "skrócona" edycja, która zastąpi wartość wartością zerową, ale nadal ma pewne pojęcie w kodzie o tym, jaka była wartość w tym miejscu. –

6

Zgaduję (znając PHP i to niewiarygodnie ... ciekawe opcje dla różnych rzeczy, mogę być całkowicie błędny), że jest tak, że wartość nie wymaga ustawienia na var. Dla dokładny powód, aby użyć go do kodu, nie mogę myśleć o przykład, ale coś takiego:

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

Nie chcesz lub musisz mieć null jako argument za barem i nadal musi wywołać zbyt baz() . Zmieniono składnię funkcji i ktoś zrobił naprawę taśmy kaczej, jak to, co wydaje się być gorące w PHP.

Powiedziałbym: nie ma powodu używać go w dobrze przemyślanej architekturze; może być użyty dla rozwiązań, które są tak niejasne, że zagłosowałbym przeciwko nim na pierwszym miejscu.

+3

Nie mam pojęcia, dlaczego chcesz łączyć wywołania funkcji w ten sposób, jeśli zawsze chcesz przekazać 'null' na' bar' w pierwszej kolejności ... – deceze

1

Na przykład może być używany jak to

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

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

Nawet jeśli fallback() powraca „zoo” (unset) usunie tę wartość.

Powiązane problemy