Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444

Обработка исключений или if ветка?

30.08.2017, 18:46. Показов 934. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил для серверной части выучить php. Большинство функций возвращают булеву переменную , говорящую об успешности выполнения. Также еще для таких функций есть выражение "or die" для прекращения работы скрипта и вывода печального сообщения.А что остается исключениям?? Например , функция "mysqli_connect()" также вернет успешно или нет , а если заключить ее в try...catch блок , сработает ли при неудаче блок catch? И если да , то что использовать , ветку или обработку)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.08.2017, 18:46
Ответы с готовыми решениями:

C++. Обработка исключений: за или против?
Всем привет. Некоторое время назад я решил отказаться от повсеместной (и не только) обработки исключений, т.к. посчитал их...

Обработка исключений. Как организовать общий обработчик исключений?
У меня есть последовательность вызова методов для внесения данных в таблицу БД. Сам метод внесения данных. Он генерирует исключение ...

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с файлами "не подходящего" типа вызывается...

8
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
30.08.2017, 20:49
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
А что остается исключениям?
Если использовать только средства,
не кидающие исключения, то очевидно - ничего.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Например , функция "mysqli_connect()" также вернет успешно
Можно использовать объект типа PDO,
он как раз будет исключения кидать.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,913
30.08.2017, 23:27
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
а если заключить ее в try...catch блок , сработает ли при неудаче блок catch?
try отлавливает исключения. Если функция не выбрасывает исключение, а просто возвращает false, try нечего отлавливать. Вы можете выбросить исключение самостоятельно, либо, как сказали выше, используйте PDO, там можно настроить выброс исключений при любой ошибке БД.

Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
что использовать , ветку или обработку)?
Оба инструмента позволяют обработать это событие. Поэтому вопрос скорее к вам, какой инструмент вы хотите использовать.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
31.08.2017, 17:16  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
try отлавливает исключения. Если функция не выбрасывает исключение, а просто возвращает false, try нечего отлавливать.
Да и псу понятно , механизм работы исключений то я знаю... Просто раз почти все функции возвращают true or false , то выходит исключения это скорее для fatal error .
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,913
31.08.2017, 17:43
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Просто раз почти все функции возвращают true or false
Повторяю, PDO умеет выбрасывать исключения при любой ошибке. Если не ошибаюсь, mysqli тоже умеет, если передать MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT.

Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Также еще для таких функций есть выражение "or die"
На реальных проектах так делать нельзя. Ошибку пишем в лог, юзеру показываем красивую страницу "Сайт временно недоступен".

Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
исключения это скорее для fatal error
Как раз нет. До PHP 7 фатальную ошибку нельзя превратить в исключение, в PHP 7 НЕ все фатальные ошибки выбрасывают исключение, поэтому в обоих случаях лучше использовать register_shutdown_function.
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
31.08.2017, 20:55  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
На реальных проектах так делать нельзя. Ошибку пишем в лог, юзеру показываем красивую страницу "Сайт временно недоступен".
Ну не знаю , разве нельзя указать в скобках имя функции , которая запишет в лог инфу и возвратит htm - разметку с той самой красивой надписью.
0
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
31.08.2017, 21:04  [ТС]
А если на конкретике :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class SQLTable
{
    private $Basedate;
 
    public function __construct($basedateLink, $name, $architecture)
    {
        $this->Basedate = $basedateLink;
        mysqli_query($basedateLink, "CREATE TABLE $name ($architecture)");
        //throwException(mysqli_errno() . " :Не удалось создать таблицу $name." . mysqli_error());}
    }
//public function Load($basedateLink)
}
class SQLBasedate
{
    private const HOST = "localhost";
    private $ConnectionLink;
 
    public function __construct($databaseName, $login, $password = "")
    {
        $ConnectionLink = mysqli_connect(SQLBasedate::HOST, $login, $password, $databaseName);
    }
 
    public function newTable($name, $architecture)
    {
        return new SQLTable($this->ConnectionLink, $name, $architecture);
    }
 
    public function close()
    {
        mysqli_close($this->ConnectionLink);
    }
}
И мусор для теста :
PHP
1
2
3
4
5
6
7
include "SQLBasedate.php";
$s = new SQLBasedate("Exam","root","");
$s->newTable("first"," id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    company VARCHAR(200) NOT NULL");
$s->close();
echo "End......"
Выдает варнинг :
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in D:\XAMPP\htdocs\Server\228666\SQLTable.p hp on line 16

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in D:\XAMPP\htdocs\Server\228666\SQLBasedat e.php on line 21
End......
Хотя если через print_r вывести свойство $ConnectionLink , то там далеко не null-ссылка.
Ну и таблица не создается , проверил через phpmyadmin.
Она то есть и аунтиф - данные верные. А в чем ошибка не знаю.
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,913
31.08.2017, 21:22
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
разве нельзя указать в скобках имя функции , которая запишет в лог инфу и возвратит htm - разметку с той самой красивой надписью.
И копипастить всё это в конец каждой функции? Уныло ведь.

PHP
1
2
3
$rows = mysqli_query($link, 'SELECT * FROM `table`') or die(log_and_show_503(mysqli_error($link)));
 
mysqli_query($link, 'INSERT INTO `table` SET `status` = 1') or die(log_and_show_503(mysqli_error($link)));
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
Хотя если через print_r вывести свойство $ConnectionLink , то там далеко не null-ссылка.
Цитата Сообщение от RaevskiAnatoly Посмотреть сообщение
PHP
1
$ConnectionLink = mysqli_connect
$this забыли
1
 Аватар для RaevskiAnatoly
34 / 35 / 12
Регистрация: 04.03.2017
Сообщений: 444
01.09.2017, 20:30  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
И копипастить всё это в конец каждой функции? Уныло ведь.
Ну все не так хуплохо. Если код синхронный , то можно сделать статичную ссылку в каком-нибудь классе (или global переменную) и использовать ее в глобальных функциях. Кстати , а что тогда вернет mysqli_error без параметров?
Вот все же мне кажется неудобно сделали с этими классами в php , в C# классы позволяют сокращать код , а здесь танцы с волшебными бубенцами "Class::CONST" , "$this->name" , а во всем виноват парсер , так полагаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.09.2017, 20:30
Помогаю со студенческими работами здесь

Найти все решения числового ребуса: ВЕТКА+ВЕТКА+СТВОЛ=ДЕРЕВО
написать программу Pascal

MVVM приложение. Как правильно реализовать - обработка исключений, DependencyObject, или ещё как-то?
Всем привет, пишу WPF MVVM приложение. Возникла следующая проблема. Короче заполняется паспорт, где вводятся значения в TextBoxы,...

Ребус ВЕТКА + ВЕТКА = ДЕРЕВО
Надо решить ребус ВЕТКА + ВЕТКА = ДЕРЕВО, используя при этом метод перебора с возвратом и множества. Как просто решить этот ребус...

Определить, входят ли в 4-х значное число цифры 2 или 7. Не работает ветка else
Добрый вечер. Условие: Дано четырехзначное число. Определить входят ли в него цифры 2 или 7. #include<iostream> #include...

Рекурсивный метод, глубокая ветка if/else или написание правильного метода с параметрами
Если коротко о проблеме, то директор дает задачу, работники офиса ее выполняют, сортировка идет по специализации и безделью. Если все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru