Uważam, że wszystkie (a nawet die()
lub die(0)
) są identyczne. Jeśli nie są identyczne, co jest preferowane w przypadku pomyślnego zakończenia skryptu? Jeśli są identyczne, czy istnieje preferowany standard wskazujący na pomyślne ukończenie skryptu? Zwykle używam exit;
.
EDYCJA: Wszystkie odpowiedzi mają „ die()
i exit()
są identyczne”, mimo że mówię to w moim pytaniu. Zaktualizowałem tytuł, aby, mam nadzieję, wyjaśnić, że to NIE jest moje pytanie. Chcę wyraźnie wskazać sukces ze skryptu wiersza poleceń.
return
ma inną konsekwencjęOdpowiedzi:
Wszystkie są identyczne. Jestem prawie pewien, że
die()
jest to zwykły alias doexit()
, ale nawet jeśli nie jest, nadal działa identycznie.Gdy jednej z tych funkcji podano argument w postaci łańcucha, przed zakończeniem procesu wypisuje łańcuch. Kiedy napotka liczbę całkowitą poniżej 255, ta liczba jest uważana za kod zwrotny procesu, który jest przekazywany z powrotem do procesu, który wywołał skrypt PHP. Jest to szczególnie przydatne podczas pisania aplikacji uruchamianych z wiersza poleceń (PHP nie jest dostępne tylko w Internecie!).
Jeśli chodzi o różnicę między
exit
,exit()
iexit(0)
, tak naprawdę nie ma. Zdecydowanie nie ma różnicy między pierwszymi dwoma, ponieważexit
jest technicznie konstrukcją językową, a nie funkcją, więc można ją wywołać z nawiasami lub bez, tak jakecho
. Zwrócenie kodu0
oznacza "ten program działał pomyślnie / bez błędów" i chociaż nie wiem, co dokładnie się dzieje, gdy nie przekażesz argumentu, PHP.net mówi, że bez argumentuexit
oznacza sukces, więc założyłbym się zwraca0
, chociaż znowu PHP.net nie pokazuje wartości domyślnej dla argumentu.źródło
exit(0)
oznacza wyjście z sukcesem,exit(1)
oznacza wyjście z porażką.exit
(lubdie
) z parametrem ciągu. Widząc np. Pospolitydie(-1)
idiom, a takżedie("Poo!...")
dużo wywołań, można nie być jednak tego pewnym, a zresztą: zgadywanie powinno należeć do innych zawodów ... A więc FTR: to 0. Co również oznacza, że ten drugidie("error!")
byłby najbardziej prawdopodobnie jest to błąd w skryptach CLI! : -oJak kilka osób wspomniało, die () i exit () to dokładnie to samo.
Jeśli spojrzysz na dokumentację PHP , są dwie opcje argumentów:
Wartość liczbowa. Jest to przydatne tylko wtedy, gdy używasz PHP z wiersza poleceń, w przeciwieństwie do serwera WWW. Wartość zero oznacza sukces. Wartość różna od zera wskazuje, że wystąpił stan błędu.
Wartość ciągu. Zostanie to wyświetlone w przeglądarce, gdy nastąpi wyjście.
Zamiast die () lub exit () zalecam używanie wyjątków i niestandardowego modułu obsługi wyjątków najwyższego poziomu do zarządzania warunkami awarii.
Dzięki temu masz większą elastyczność w wykonywaniu takich czynności, jak automatyczne rejestrowanie błędów. Ponadto, jeśli używasz PHP do implementacji JSON API, ta obsługa wyjątków może zamiast tego zwrócić prawidłowy, wskazujący błąd fragment kodu JSON.
źródło
Powiedziałbym, że jeśli chodzi o lepszą semantykę,
die($arg);
powinna być używana do nienormalnego lub nieoczekiwanego zakończenia, nawet jeśli - oczywiście - nadal to złapałeś. Iexit($arg);
powinien być używany do normalnego (oczekiwanego / kontrolowanego) końca procesu, jak wbreak;
przypadku strukturyfor
lubwhile
lubswitch
struktury, ale z ostatecznym zakończeniem.Niemniej jednak… Osobiście często używam ogólnej
if { } else { }
struktury do sterowania różnymi gałęziami ogromnych procesów lub buforowania wyjścia, więc nie muszę używać opcji „exit”.Używam również
die($arg)
w prostej semantyce wyłapującej błędy, takiej jak w$db = mysql_connect([$args]) or die ($error);
...źródło
die();
jest tylko synonimemexit();
i funkcjonalnie identyczne.Standardowym sposobem jest użycie kodu zakończenia zerowego do oznaczenia sukcesu i czegokolwiek innego do określenia warunku błędu.
źródło
die () jest zwykle używany do zabicia skryptu z wyjściem błędu:
die("There was a fatal error");
wyjście gdzie-jako jest zwykle używane jako udane wyjście (przynajmniej w moim kodowaniu)
PHP Manual mówi, że funkcje są identyczne.
źródło
Zostanę odrzucony do piekła , ale w niektórych przypadkach podczas hakowania w CLI nie chcemy, aby program został zabity, jednocześnie nie chcąc kontynuować pełnego wykonania.
W tym przypadku celem jest uniknięcie wykonywania wywołań API do oddzielnego pliku punktów ręki. Powiedzmy, że mam ładny przycisk odtwarzania w moim interfejsie, który wykonuje wywołania systemowe.
Przykład 1: Program został zabity po wykonaniu zadania, żadne dane nie zostały zwrócone. To nie jest pożądane.
if ($_GET["play"] != ""){ // Some job exit; } /* Huge amount of data*/
Przykład 2: Program nadal działa , przekazując pełne dane w żądaniu GET. W tym przypadku nie jest to konieczne. To spowalnia przeglądarkę ze wszystkimi danymi, które już ma.
if ($_GET["play"] != ""){ // Some job } /* Huge amount of data*/
Przykład 3: Program nadal działa , żadne dane nie zostały zwrócone zgodnie z oczekiwaniami, polecenie odtwarzania zostało wykonane, ale cały zestaw danych został przeanalizowany, jest to niepotrzebne zadanie, może spowolnić działanie php / maszyny.
/* Huge amount of data*/ if ($_GET["play"] != ""){ // Some job }
Przykład 4: Program nadal działa , żadne dane nie zostały zwrócone zgodnie z oczekiwaniami, polecenie odtwarzania zostało wykonane, całe dane nie zostały przeanalizowane, php zwrócił bardzo szybko 200 OK z pustą odpowiedzią, zgodnie z oczekiwaniami. Wszyscy szczęśliwi!
if ($_GET["play"] != ""){ // Some job goto END; } /* Huge amount of data*/ END;
Tak! Używanie GOTO jest czasami brane pod uwagę - jako najlepsze do zrobienia 🔨 -!
https://www.php.net/manual/en/control-structures.goto.php
źródło
die
jest dokładnie równoważneexit
.Z instrukcji :
Jest to przydatne tylko wtedy, gdy masz jakieś opakowanie, które robi coś na podstawie statusu wyjścia. Chyba że masz konkretną potrzebę zgłoszenia kodu wyjścia światu zewnętrznemu, po prostu
exit;
.źródło