Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.07.2011, 20:42
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

Исключения в PHP
Написал так:
<?php 
class A{

	function __construct($n,$l,$p){
	 try{
	 if($n="" or $l="" or $p="")
	 throw  new Exception("Ошибка, один из
	  аргументов не передан конструктору!");
	 
	 echo "Имя: ",$n;
	 echo "<br>Логин: ",$l;
	 echo "<br>Пароль: ",$p;
	}catch(Exception $e){
	 echo $e->getMesage();
	}
}

}

$obj = new A("","clown","111");

?>



Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а
выдаёт такой результат:
Имя: 
Логин: 
Пароль:

и даже значения переданные конструктору не подставляются.

Последний раз редактировалось romantik2011, 25.07.2011 в 21:26.
Ответить с цитированием
  #2 (permalink)  
Старый 25.07.2011, 21:49
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

if($n*!*=*/!*"" or $l="" or $p="")

И это не единственная ошибка, есть еще.
Ответить с цитированием
  #3 (permalink)  
Старый 26.07.2011, 00:24
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

Всё, спасибо так, сработало.
<?php 

class nameExc extends Exception{
	function __construct($msg){
	$msg .=" name!";
	parent::__construct($msg);
	}
}

class loginExc extends Exception{
	function __construct($msg){
	$msg .=" login!";
	parent::__construct($msg);
	}
}

class passExc extends Exception{
	function __construct($msg){
	$msg .=" password!";
	parent::__construct($msg);
	}
}

class A{

	function __construct($n,$l,$p){
	 try{
	 if($n=="")
	 throw  new nameExc("Введите");
     if($l=="")
	 throw  new loginExc("Введите");
     if($p=="")
	 throw  new passExc("Введите");

	}catch(nameExc $e){
	echo $e->getMessage();
	}
	catch(loginExc $e){
	echo $e->getMessage();
	}
	catch(passExc $e){
	echo $e->getMessage();
	}
}

}

$obj = new A("","clown","111");

?>


Меня интересует один вопрос.
Зачем нужно писать throw, если зроу выдаёт исключения ,а потом всё равно идёт переход от него в catch
и КЭТЧ выбрасывает ещё исключение, зачем это нужно? Почему не достаточно одно блока try...catch?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?
Ответить с цитированием
  #4 (permalink)  
Старый 26.07.2011, 00:33
Профессор
Отправить личное сообщение для ваый Посмотреть профиль Найти все сообщения от ваый
 
Регистрация: 29.06.2011
Сообщений: 445

Внимательно читаем, что к чему http://php.net/manual/ru/language.exceptions.php. catch исключений не выбрасывает. Вы не очень понимаете, что к чему в механизме работы исключений.
Ответить с цитированием
  #5 (permalink)  
Старый 26.07.2011, 01:09
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?
Ответить с цитированием
  #6 (permalink)  
Старый 26.07.2011, 11:06
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

исключение может в "трай" появиться
в блоке catch исключение можно выбросить повторно
Ответить с цитированием
  #7 (permalink)  
Старый 26.07.2011, 23:08
Аспирант
Отправить личное сообщение для romantik2011 Посмотреть профиль Найти все сообщения от romantik2011
 
Регистрация: 20.07.2011
Сообщений: 50

А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
Ответить с цитированием
  #8 (permalink)  
Старый 26.07.2011, 23:39
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от romantik2011 Посмотреть сообщение
оператор throw даёт возможность выбросить исключение, но в этом не главная его цель
в этом его главная и единственная цель, где это исключение дальше ловиться будет уже не так важно
Ответить с цитированием
  #9 (permalink)  
Старый 26.07.2011, 23:49
Аватар для Shaci
:-/
Отправить личное сообщение для Shaci Посмотреть профиль Найти все сообщения от Shaci
 
Регистрация: 28.09.2009
Сообщений: 1,126

Сообщение от romantik2011 Посмотреть сообщение
А оператор throw даёт возможность выбросить исключение, но в этом не главная его цель, а его цель сразу перелететь на оператора catch с тем же типом создаваемого объекта класса что и в операторе throw и обработать его в КЭТЧ? То есть смысл оператора ЗРОУ чтоб перелететь сразу в кетч, отдать объекту описанного в кетче исключение и обработать его в кетче?
ну, приблизительно да, если есть оператор throw, естесственно будет искаться блок catch, т.к. этот оператор выбрасывает исключение, и его надо обработать. Не помню , как в php (подозреваю, что так же), но в java(я имею ввиду java, а не js) выброшенное исключение определенного класса будет обработано блоком catch, ловящим исключение либо того же класса, либо суперкласса

Последний раз редактировалось Shaci, 26.07.2011 в 23:53.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Запуск выполнения PHP при нажатие на кнопку??? Abibas220 Общие вопросы Javascript 1 05.01.2011 12:05
Как передать картинку из javascript в php KIVagant AJAX и COMET 3 12.05.2010 11:54
jquery, php, json… ? незнайка jQuery 4 06.02.2010 01:45
javascript и php (Вопрос) Гауляйтер Общие вопросы Javascript 3 06.05.2009 09:23