Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Заблокирован

try catch без if

28.09.2013, 07:58. Показов 1199. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Если в связанной таблице есть сирота, то например такой код

PHP
1
$row[$cnt] = $link->referenced_result[$link->referenced_result[$cnt]][$row[$cnt]];
вызывает ошибку. Нет такого индекса, потому что нет родителя у осиротевшей записи.

Типовая конструкция if(isset()) сама по себе выглядит идиотски, что усугубляется применительно к сложным конструкциям.

PHP
1
2
if(isset($link->referenced_result[$link->referenced_result[$cnt]][$row[$cnt]]))
$row[$cnt] = $link->referenced_result[$link->referenced_result[$cnt]][$row[$cnt]]
В случае необходимости надо не забыть исправить имена, логику и синтаксис двух местах, что и является признаком упомянутого идиотизма.

Логика подсказывает исключения. Если ошибка - ловим, идентифицируем по номеру, принимаем решение. Но. Я до сих пор не пойму цимеса php-исключений. На js мы описываем конструкцию

JavaScript
1
try{} catch err {// тут логика обработки err
На php я должен самостоятельно все проверить и выбросить исключение чтобы его тут же обработать. То есть опять оно самое, но теперь на некотором отдалении двух одинаковых строк:

PHP
1
if(!isset($link->referenced_result[$link->referenced_result[$cnt]][$row[$cnt]])) throw new exception и бла-бла-бла

Что выглядит еще тупее. Вопрос такой. Скорее всего я тупой или мне не везет и подходящих примеров пока не встречалось. Повсюду практикуется этот ненормальный подход

PHP
1
if(isset(предпопожительно_существующая_переменная_в_качестве_указателя_на_предположительно_существующую_переменную))  $var = предпопожительно_существующая_переменная_в_качестве_указателя_на_предположительно_существующую_переменную;

В общем как можно присвоить определенной переменной значение предположительно определенной переменной и одновременно проверить существует ли она.

Добавлено через 11 минут
Кстати, стенографический синтаксис js типа

PHP
1
$var = $possible_undefined || 0;
На php тоже не работает. Дает всегда 1
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.09.2013, 07:58
Ответы с готовыми решениями:

Зачем нужен try без catch
Я не понимаю на кой черт это использовать. Объясните зачем оно нужно и где это можно использовать(за примеры буду очень благодарен)

Может ли существовать catch без throw?
дароу, сабж ясен из заголовка Поправочка:

Отлов исключений без использования try/catch
Всем привет. Есть форма и не сколько кнопок. При нажатии на каждой из кнопок будет вызвано исключение. Требуется: 1. ловить все...

4
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.09.2013, 10:15
только если через тернарный оператор
PHP
1
$var = isset($possible_undefined) ? $possible_undefined : 0;
Добавлено через 1 минуту
Если используется ООП-подход то можно реализовать с помощью магических методов
0
Заблокирован
28.09.2013, 10:20  [ТС]
Триада те яйца вид снизу. Копипаста.

Магическими методами не интересовался, поскольку тямы не хватает и есть опасение что в очередной реализации php какое-то заклинание отвалится.

В общем сделать try-catch как на яве на php можно, или никак?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.09.2013, 10:32
Цитата Сообщение от sqlnub Посмотреть сообщение
В общем сделать try-catch как на яве на php можно
в смысле
Java
1
somefunction() throws SomeException { }
? Если да, то нет, такого нельзя

Добавлено через 3 минуты
ах, да, есть еще такое http://www.php.net/manual/en/f... andler.php

Добавлено через 3 минуты
в яве классы в библиотеках "сами" бросают исключения в случае ошибки. В пыхе таких готовых библиотек для стандартных ошибок нет (т.к., в отличии от той же явы, он не only-OOP). Но при желании можно воспользоваться set_error_handler и ErrorException, сымитировать подобное поведение
1
Заблокирован
28.09.2013, 15:15  [ТС]
Спасибо, немного прояснилось.

Однако это все слишком дорого для примитивной проверки. Которая уже отчасти сделана классическим способом. Оказывается..., то есть я знал но не догадывался что и на переменную можно наложить кучу чтобы временно подавить вывод сообщений об ошибке.

PHP
1
2
3
if(isset($link->referenced_result[$cnt])) {
    @$row[$cnt] = $link->referenced_result[$link->referenced_result[$cnt]][$row[$cnt]];
}

И тишина. Самое смешное что мне так и надо - пустой $row[$cnt] для сироты, которому в конце проверки по isset() я присваивал @$row[$cnt] = ''; если родитель не находился.

Но даже в противном случае проверить содержание переменной уже не та чудовищная копипаста. Например

PHP
1
if (strlen($row[$cnt]) < 1)  $row[$cnt] = 'dont want to be empty';
Кстати, попутно узнал что в исходнике php массивы представляют собой т.н. balanced tree, которое как одна капля воды похоже на nested set model в РБД.

http://en.wikipedia.org/wiki/S... earch_tree

Да, еще пишут что проверка массива на неопределенный элемент идет быстрее если вместо isset() применять array_key_exists()

Добавлено через 5 минут
Так что я поменял на

PHP
1
if(array_key_exists($cnt, $link->referenced_result)
Быстрее или нет - хбз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.09.2013, 15:15
Помогаю со студенческими работами здесь

Конструкция try catch в цикле while. Зацикливается блок catch
Здравствуйте. Столкнулся с проблемой: при попытке запихнуть в цикл конструкцию try catch - зацикливается часть, расположенная в блоке...

Try catch
try { throw pDoc-&gt;C; } catch (City) { return; } есть динамический City* C, ему присвается значение другого такого...

try-catch
Читаю книгу Страуструпа. Он пишет (стр 232), что можно не передавать обработчику исключений какое либо значение. #include...

try{} catch(){}
Как достать строковую переменную из try{} catch(){} //Создаем форму Form firstForm=new Form(&quot;Добро...

Try-catch
Добрый вечер, #include &lt;iostream&gt; using namespace std; void F1(int); void F2(int, int); void F3(int, int, int);


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru