X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Исключения в PHP
romantik2011
romantik2011
Topic Starter сообщение 25.7.2011, 20:40; Ответить: romantik2011
Сообщение #1


Читаю про исключения в пхп, решил написать код с исключениями, не срабатывают исключения, а выдаёт ошибку на 19 строке:

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


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

?>
[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 25.7.2011, 20:49; Ответить: Apay
Сообщение #2


проверте баланс скобок
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 25.7.2011, 21:23; Ответить: romantik2011
Сообщение #3


Написал так:
[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");

?>
[/PHP]


Я хочу чтоб сработало исключение при пустой передаче первого аргумента конструктору, а исключение не срабатывает, а
выдаёт такой результат:
[PHP]Имя:
Логин:
Пароль:[/PHP]
и даже значения переданные конструктору не подставляются.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 25.7.2011, 21:33; Ответить: alexdrob
Сообщение #4


(romantik2011 @ 26.7.2011, 00:23) *
а исключение не срабатывает

провека на равенство == и ===, а = - знак присвоения
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 25.7.2011, 21:35; Ответить: romantik2011
Сообщение #5


Вот так вообще выдаёт ошибку:
[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");

?>
[/PHP]

Fatal error: Call to undefined method Exception::getMesage() in C:\www\htdocs\test.ru\www\index.php on line 14
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 25.7.2011, 21:38; Ответить: alexdrob
Сообщение #6


слово message пишется с 2 s
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
romantik2011
romantik2011
Topic Starter сообщение 26.7.2011, 0:24; Ответить: romantik2011
Сообщение #7


Всё, спасибо так, сработало.
[PHP]
<?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");

?>
[/PHP]

Меня интересует один вопрос.
Зачем нужно писать throw, если зроу выдаёт исключения ,а потом всё равно идёт переход от него в catch
и КЭТЧ выбрасывает ещё исключение, зачем это нужно? Почему не достаточно одно блока try...catch?
Зачем нужен всё-таки ЗРОУ, если его же задачу может выполнить КЭТЧ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
RayOfLight
RayOfLight
сообщение 26.7.2011, 4:34; Ответить: RayOfLight
Сообщение #8


Потому что с помощью throw выбрасывается то самое исключение, которое попадет в catch, т.е., проще говоря, ничего не поймается, если ничего не выбросить.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 26.7.2011, 10:51; Ответить: Mulder_hb
Сообщение #9


(romantik2011 @ 26.7.2011, 03:24) *
Меня интересует один вопрос.

Потому что обычно исключение вбрасывается в одном сценарии, а ловится оно совсем в другом. На этом построен весь принцип работы с исключениями: код, в котором произошло исключение, зачастую ничего не знает о том, как его обрабатывать. Ваш код правильно записывать так:
Файл 1.php:
[PHP]<?php

class A {
function __construct($n, $l, $p) {
if ($n == "") {
throw new nameExc("Введите");
}
if ($l == "") {
throw new loginExc("Введите");
}
if ($p == "") {
throw new passExc("Введите");
}
}
}[/PHP]
Файл 2.php:
[PHP]<?php

try {
$obj = new A("","clown","111");
}catch(nameExc $e) {
echo $e->getMessage();
} catch(loginExc $e) {
echo $e->getMessage();
} catch(passExc $e){
echo $e->getMessage();
} catch (Exception $e) {
// Заглушка
}[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
alexdrob
alexdrob
сообщение 26.7.2011, 10:53; Ответить: alexdrob
Сообщение #10


вообще блок catch предназначен не только для вывода сообщений об ошибке. это блок, код которого будет выполнен если ошибка произошла, возможно у вас там будет отключение от БД или какой либо ещё код, который нужно выполнить в случае если у вас не выполнился основной код.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3289 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1168 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44760 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1856 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3360 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 28.3.2024, 16:05
Дизайн