За последние 24 часа нас посетили 18459 программистов и 1711 роботов. Сейчас ищут 926 программистов ...

использование "or die"

Тема в разделе "PHP для новичков", создана пользователем FishError, 16 фев 2008.

  1. FishError

    FishError Активный пользователь

    С нами с:
    16 фев 2008
    Сообщения:
    24
    Симпатии:
    0
    Подскажите, пожалуйста, где можно узнать про использование в скриптах "or die"
    Например в этом случае, когда будет выведено "Вы не выбрали победителя"?
    PHP:
    1. $winner = $_POST['winner'] or die("Вы не выбрали победителя"));
    А в других случаях? что вообще это за команда or?
    (конечно я догадываюсь интуитивно, что в случае ошибки, но хотелось бы конкретнее)
    В мане и гугле не нашел:(
    если плохо искал, помогите найти ;-).
     
  2. +Sten+

    +Sten+ Активный пользователь

    С нами с:
    27 авг 2007
    Сообщения:
    978
    Симпатии:
    0
    Логические операторы
    die
    or - или. В твоём коде говорится "присвой переменной $winner значение $_POST['winner'], или умри" Сообщение будет выведено, если в $_POST[] нету ключа winner, тоесть это поле не было отправлено пользователем. Сценарий прекратит свою работу.
     
  3. Clone

    Clone Guest

    имхо, плохой тон, особенно при обработке форм, когда нужно чётко показать где пользователь ошибся...
     
  4. FishError

    FishError Активный пользователь

    С нами с:
    16 фев 2008
    Сообщения:
    24
    Симпатии:
    0
    Да, я делал по-другому, (проверял каждый инпут и затем ошибки все выводил рядом с необходимыми полями ввода).
    Это я разбираю чужой код, и понял что не знаю как работает это дело.
    что я узнал из мана? Логическое ИЛИ, и эквивалент "Output a message and terminate the current script"
    и еще: "оператор присвоения означает, что левый операнд получает значение правого выражения".
    не могу понять :)
    Код (Text):
    1. function foo($somevar)
    2. {
    3.     echo "In foo() $somevar<br />\n";
    4.     return "ReturnedValue";
    5. }
    6. print foo() or die ("an error");
    Вот тут почему не выводит "an error"
    а только
    Пример, понимаю дурацкий ;)
    Хочса разобраться просто.
     
  5. Clone

    Clone Guest

     
  6. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Потому что парсер натыкается на ошибку в синтаксисе раньше, чем происходит вывод. (См. что писал Clone)
     
  7. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    1)
    PHP:
    1. $a=5; //=0;
    2. $c=0;
    3. $b=$a or $c=1;
    4. echo 'a='.$a.' b='.$b.' c='.$c;
    5.  
    $a=(2+3)*4;
    foo() всегда вернет истину (непустую строку, не равную "0"), поэтому die никогда не выполнится.
    а вот если
    PHP:
    1. function check($x) {
    2. return ($x>0);
    3. }
    4. $a=0;
    5. echo check($a) or die('error');
     
  8. FishError

    FishError Активный пользователь

    С нами с:
    16 фев 2008
    Сообщения:
    24
    Симпатии:
    0
    PHP:
    1.  
    2. <?php
    3. function check() {
    4.   return (0);
    5.   }
    6.    echo check() or die('error');
    7. Вывод: error
    8.  
    9.  function check() {
    10.   // пусто
    11.   }
    12.   echo check() or die('error');
    13. Вывод: error
    14.  
    15. function check() {
    16.   return (1);
    17.   }
    18.    echo check() or die('error');
    19.  
    20. вывод: 1
    21.  
    22. //и вообще
    23.  
    24. NULL or die ('error')
    25. ?>
    26.  
    то есть другими словами or die "срабатывает" при возврате 0 либо NULL ?
    верно?
    спасибо, теперь понятно :)
     
  9. Clone

    Clone Guest

    Гон. Функция, определяющая, что ей обязательно нужен один параметр(переменная $somevar) без него не запустится.
     
  10. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    что сказать-то хотел? что для тебя нормально оставлять код с такими ошибками?
     
  11. FishError

    FishError Активный пользователь

    С нами с:
    16 фев 2008
    Сообщения:
    24
    Симпатии:
    0
    Давнишняя моя тема :)
    Хотелось бы ответить на свой первый пост:
    (Из книги Котерова Самоучитель PHP 5)

    Конструкция ordie()
    Давайте еще раз посмотрим на предыдущие примеры. Обратите внимание на доселе не встречавшуюся нам конструкцию or die о'. Ее особенно удобно применять как раз при работе с файлами. Как мы знаем, оператор or имеет очень низкий приоритет (даже ниже, чем у =), поэтому в нашем примере всегда выполняется уже после присваивания. Иными словами, первая строчка примера с точки зрения РНР выглядит так:
    ($f=fopen("/home/user/file.txt", "r")) or die("Ошибка!");
    Конечно, то, что or обозначает "логическое ИЛИ" в нашем случае не так интересно (ибо возвращаемое значение просто игнорируется). Нас же сейчас интересует другое свойство оператора: выполнять второй свой операнд только в случае ложности первого. Смотрите: если файл открыть не удалось, fopen о возвращает false, а значит, осуществляется вызов die о "на другом конце" оператора or.
    Заметьте, что нельзя просто так заменить or на, казалось бы равнозначный ему оператор | |, потому что последний имеет гораздо более высокий приоритет — выше, чем у =. Таким образом, в результате вызова функции $f=fopen("/home/user/file.txt", "r") || die("Ошибка!");
    в действительности будет выполнено
    $f = (fopen("/home/user/file.txt", "r") II die("Ошибка!"));
    Как видите, это не совсем то, что нам нужно.

    --------------------------
    Читать книги очень полезно. Причем прежде чем садится чтото делать, а не после :)
    Столько бы времени сэкономил себе и людям, если бы раньше сел и почитал от корки до корки.