Подскажите, есть скрипт и в конце нет я ставлю exit или die (на сколько я знаю это одно и тоже), это нормально? нормально в смысле со стороны клиента (браузера), не будут ли ему еще до отправлены какие то хреновые заголовки или типа того.
1. разница между ними есть 2. заголовков ни одна из этих функций не модифицирует 3. exit; отличная практика при редиректах в общем "нормально" или "не нормально" это всё зависит от того как конкретно взятый ты смог использовать эти конструкции и функции.
Ну вот есть 2 скрипта: первое (без exit): Код (Text): <!doctype html> <html> <head> <meta charset="utf-8" /> <title>PAGE</title> </head> <body> <?php echo '<h1>Hello</h1>'; ?> </body> </html> Второе (с exit): Код (Text): <!doctype html> <html> <head> <meta charset="utf-8" /> <title>PAGE</title> </head> <body> <?php echo '<h1>Hello</h1>'; ?> </body> </html> <?php exit(); ?> тот кто зайдет на эти страницы у него результат в обоих случаях будет одинаковый? Ну возможно во втором будет на 1 пустую строчку больше в конце, но это не критично, не об этом речь. PS только не спрашивайте к чему это все и почему нельзя обойтись без exit, в реальности не все так как в примере, просто долго объяснять
в приведенном примере можно без экзита обойтись ведь это и так конец сценария. die() - экстренное прерывание исполнения. единственным аргументом принимает сообщение которое последним печатается в STDOUT. exit / exit() - завершение процесса с возвратом сигнала родительскому процессу.
пшшшшшшшшшшшшшшшшшшшшшшшш..... есть 2 файла, они подключаются и между ними функция: Код (PHP): include 'first.php'; myFns(); include 'second.php'; во втором файле собственно происходит генерация страницы HTML и ее вывод, у меня нет доступа к этому файлу, в принципе как и доступа к файлу скрипта приведенного выше, но есть доступ к myFns, я могу в этой функции все что угодно написать, вот я и хочу в этой функции генерировать свою страницу HTML и выводить, но как тогда быть с подключением второго файла? мне не надо его подключать, вот я и хочу его обрубить при помощи exit, т.е. функция myFns будет заканчиваться exit.
да, так и делай. exit часто используется в момент когда логически скрипт уже завершен но ниже есть еще тонна кода которую уже не надо выполнять.
хм, ок. я лет десять назад видимо между строк прочитал что exit с аргументом общается с родителем а die прерывает работу скрипта с текстовым сообщением. так и использую. и код логически более понятно обрывается.
Так почему же не имеет к примеру JAVA: System - системный класс http://docs.oracle.com/javase/7/docs/api/java/lang/System.html exit() - его метод http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit(int) Так получается, он имеет отношение к ООП. Вот с нормальным завершением я погорячился. "0" - это аварийное завершение программы. т.е. Указав статус "0" методу exit() мы сообщаем, что JVM завершится аварийно. пример: Код (Text): package com.tutorialspoint; import java.lang.*; public class SystemDemo { public static void main(String[] args) { int arr1[] = { 0, 1, 2, 3, 4, 5 }; int arr2[] = { 0, 10, 20, 30, 40, 50 }; int i; // copies an array from the specified source array System.arraycopy(arr1, 0, arr2, 0, 1); System.out.print("array2 = "); System.out.print(arr2[0] + " "); System.out.print(arr2[1] + " "); System.out.println(arr2[2] + " "); for(i = 0;i < 3;i++) { if(arr2[i] > = 20) { System.out.println("exit..."); System.exit(0); } else { System.out.println("arr2["+i+"] = " + arr2[i]); } } } }
я привык писать die там, где аварийное завершение и exit при запланированном выходе. никакого тайного смысла в этом нет, просто сами слова подталкивают к этому )))
вот так. не имеет. это считай выход из функции main() с сообщением статуса в родительскую функцию - родительский процесс. приведенный пример джавы - неудачный пример. сорри)))) ты невнимателен. во всех реализациях системных вызовов статус 0 означает однозначное успешное завершение программы. пул 1-254 можно использовать для указания фейлов и софтфейлов. значение 255 вообще магическое. более никаких кодов быть не может потому что почти 99% реализаций на статус выделяют всего один октет. ну и как бы если ты JVM приводишь в пример - не поленись сходить в офмануал и так убедиться что ща ляпнешь полную фигню))) учи матчасть.
И не ты один. Собсно, это, вероятно, основная причина, почему обе инструкции все еще существуют вместе. Присоединяюсь к вопросу.
ну извините, не по теме, выржеите в другое место. Хочется прдолжить. согласен, просто увлекся. Бро, я это привел из документации. и привел ссылки откуда взял, получается ты не внимателен Конечно, я сам не особо это переведу, перевод был машинный. И читал про это я в одной книжке, давно, книжки которой уже нет на руках(подарил), но такое помнится. Вот нашел в доках, что так и написано. http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#exit(int) Ну так в строчке выше написано машинный перевод: Функция тоже часть большой программы. Если System - это класс a exit() его метод, по почему это не ООП?
mahmuzar, я тебя не понимаю. ты то говоришь что ноль это ок то говоришь что ноль это не ок. я тебе коротко обозначил что это вообще из операционных систем. а ты лепишь ООП. помидор красный у трактора дверь вот так открывается. если тебе нравится везде ООП видеть - видь. из вот этих вот строк кода я так и не понял что именно ты для себя решил. ноль это ок или не ок?
есть два класса: Код (Text): package javaapplication1; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author life */ public class JavaApplication1 { public JavaApplication1() { } /** * @param args the command line arguments */ public static void main(String[] args) { } public void test() { System.out.println("JavaApplication1 0"); System.exit(0); System.out.println("JavaApplication1 1"); } } Код (Text): /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication1; /** * * @author life */ public class NewClass { public static void main(String[] args) { System.out.println("Hello NewClass 0"); JavaApplication1 obj = new JavaApplication1(); obj.test(); System.out.println("HelloNewClass 1"); } } при System.exit(0); вывод будет: Код (Text): run: Hello NewClass 0 JavaApplication1 0 BUILD SUCCESSFUL (total time: 0 seconds) при при System.exit(1); Код (Text): run: Hello NewClass 0 JavaApplication1 0 Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds) Заметь, завершается выполнение, не только метода JavaApplication1.test() но и метода NewClass.main() Ну если произошла авария в программе, стоит ли продолжать выполнение в другой части программы? Добавлено спустя 35 секунд: Ноль это авария в программе, можно было понять, о чем я, вроде расписал как мог
ты сам себе противоречишь ну ладно ты меня в хер не ставишь с тем что я тебе говорю. а я ведь сказал что и как. просто ты не всосал через свою призму ООПэшности вселенной. но мануал-то ты сам переводишь. и он сообщает (внимание!!!) Аргумент служит в качестве кода состояния; по соглашению, ненулевой код состояния указывает аварийное завершение. и тут ты мне опять туда-сюда пятое десятое. будь любезен, приди к единому мнению в своей головушке НОЛЬ ЭТО ЗАЕ6ИСЬ ИЛИ ПИ3ДЕЦ?
О чем спор вообще? JAVA, уровни ОС.. Как разработчики PHP решат, так и будет exit() в PHP работать. А то, как они решили, четко прописано в документации к PHP: Всеу. Неважно, в традициях чего и под влиянием чего это сделано, поведение однозначно прописано в официальной документации.
ДААА, невгимательность вгоняет в краску:-D Короче, ноль это норма, а остальное *ИЗДЕЦ. Спасибо всем, и зрителям и участникам Добавлено спустя 1 минуту 14 секунд: Ага, прописано. Моя невнимательность во всем виновата.