[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Исключения PHP
romantik2011
Читаю про исключения в пхп, решил написать код с исключениями, не срабатывают исключения, а выдаёт ошибку на 19 строке:


Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\www\htdocs\test.ru\www\index.php on line 19



<?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("5","clown","111");

?>




Спустя 4 минуты, 20 секунд (25.07.2011 - 19:45) ADiel написал(а):
syntax error это не исключение. код даже выполняться не будет.

Исключением может быть нотис, но никак не syntax error

Спустя 39 секунд (25.07.2011 - 19:46) kristall написал(а):
Фигурную скобку у конструктора не закрыл.

Спустя 26 секунд (25.07.2011 - 19:47) ADiel написал(а):
if($n="" or $l="" or $p="") 
тут не сравнение, а присваивание идет

Попробуй
function __construct($n="",$l="",$p="")

if(empty($n) || empty($l) || empty($p))

Спустя 9 секунд (25.07.2011 - 19:47) Invis1ble написал(а):
romantik2011
скобку пропустил
<?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("5","clown","111");

?>

Спустя 54 секунды (25.07.2011 - 19:48) Winston написал(а):
Цитата (romantik2011 @ 25.07.2011 - 19:41)
if($n="" or $l="" or $p="")

Забываем про это вообще и пишем так
if(!isset($n) || !isset($l) || !isset($p))

Спустя 29 секунд (25.07.2011 - 19:48) Invis1ble написал(а):
ADiel
Цитата
Исключением может быть нотис, но никак не syntax error

исключение - это исключение wink.gif
например Exception

Спустя 38 секунд (25.07.2011 - 19:49) Invis1ble написал(а):
PHPprogrammer
Цитата
Забываем про это вообще и пишем так

почему?
if(!isset($n) || !isset($l) || !isset($p)) никогда true не будет )
кстати, так проще - if(!(isset($n, $l, $p))

Спустя 34 минуты, 59 секунд (25.07.2011 - 20:24) romantik2011 написал(а):
Написал так:

<?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");

?>



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

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

Спустя 23 минуты, 28 секунд (25.07.2011 - 20:47) Invis1ble написал(а):
romantik2011
Цитата
Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а
выдаёт такой результат:
Имя:
Логин:
Пароль:

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

все правильно. Тебе же написали, что ты вместо сравнения присваиваешь пустые строки.
if($n=="" or $l=="" or $p=="")

Спустя 2 часа, 37 минут, 5 секунд (25.07.2011 - 23:24) romantik2011 написал(а):
Всё, спасибо так, сработало.

<?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?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?

Спустя 5 минут, 32 секунды (25.07.2011 - 23:30) Invis1ble написал(а):
Цитата
всё равно идёт переход от него в catch

разве? без выброса исключения захода в блок catch не будет
Цитата
КЭТЧ выбрасывает ещё исключение, зачем это нужно

catch не выбрасывает исключения, оно их отлавливает
также, можно назначить свои обработчики исключений

Спустя 1 минута, 28 секунд (25.07.2011 - 23:31) romantik2011 написал(а):
без выброса исключения захода в блок catch не будет

А зачем заходить в кетч и второй раз выбрасывать исключение, разве одного раза от ЗРОУ которое выбросило сообщение не достаточно, зачем ещё одно сообщение в исключении?

Спустя 8 минут, 55 секунд (25.07.2011 - 23:40) Invis1ble написал(а):
Цитата
второй раз выбрасывать исключение

где оно второй раз выбрасывается? выбрасывает исключение опратор throw, в catch ты его ловишь (catch (Exception $e)) и выводишь с помощью метода getMessage(), а можешь и не выводить, а проделать какие-то другие действия

Спустя 28 минут, 6 секунд (26.07.2011 - 00:08) romantik2011 написал(а):
То есть ЗРОУ даёт возможность отправится в кэтч, а без ЗРОУ, трай...кетч не сможет выдавать исключения?

Спустя 8 часов, 14 минут, 6 секунд (26.07.2011 - 08:22) kristall написал(а):
try-catch -- это ООПшная приблуда, старые функции при ошибках исключений не выбрасывают. Нужно ручками проверять код возврата и кидать.

Спустя 3 часа, 15 минут, 24 секунды (26.07.2011 - 11:38) Nikitian написал(а):
kristall
Для старых функций можно самому кидать исключения так:

function error_handler($errorType, $message, $errfile, $errline){
throw new Exception( strip_tags($message).' in ['.$errfile.'] on '.$errline.' line', $errorType);
}
function fatalErrorShutdownHandler() {
$last_error = error_get_last();
if ($last_error['type'] === E_ERROR) {
// fatal error
error_handler(E_ERROR, $last_error['message'], $last_error['file'], $last_error['line']);
}
}

set_error_handler('error_handler');
register_shutdown_function('fatalErrorShutdownHandler');

Спустя 1 день, 13 часов, 9 минут, 18 секунд (28.07.2011 - 00:47) Krevedko написал(а):
я в исключения вникал вникал, но смысла их так и не понял blink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.