Автор Гілка: До якого ступеню ідіотизму потрібно робити перевірки в коді - без конкретики  (Прочитано 976 раз)

по

  • Гість
Питання без конкретики тому що ... читайте далі.
---
Я людина, яка  нікому не довіряє.

Тепер про код: Про перевірки обов’язкових змінних, що без перевірки не можна використувати в коді я не питаю. А от чи потрібно перевіряти змінні, що на 100% (?) будуть встановлені і будуть такими які потрібні.

Зараз поясню: наприклад в сесії встановлюються конкретні змінні. В ході виконання скрипта перевіряється лише одна сесійна змінна. Якщо її нема - значить і всих інших змінних нема. Таким чином прямо перевіривши лише одну змінну стає ясно що інших змінних нема. Я таку перевірку інших змінних (ті які не встановлені) називаю неявною перевіркою.

А якщо одна сесійга змінна встановлена - то всі інші також встановлені і мають свої конкретні значення. В коді вони також перевіряються і якщо... то... або ... а може і по іншому...  (викорстовуються в алгоритмах). Ну на те вони і змінні щоб вони використовувались.

Змінні спочатку матимуть початкове значення що вони отримують при першій ініціалізації. Тепер питання: Чи потрібно після (і до) першої ініціалізації змінних перевіряти ці змінні.

І в кінці  більш конкретний приклад: при старті із бд читаються і встановлюються змінні. Чи потрібно іх (до запису в сесію) перевіряти на відповідність? Бо вдруг (чи раптом  :-\ ) в полі таблиці замістсь 0 або 1 буде текстовий рядок, ХОЧА В ПОЛІ  ТАБЛИЦІ ПОВИННО БУТИ 0 АБО 1 (поле таблиці не може містити текстовий рядок). Тому я на початку цього складного питання і написав "А от чи потрібно перевіряти змінні, що на 100% (?) будуть встановлені і будуть такими які потрібні."



по

  • Гість
Чи потрібно після (ЧИ до) першої ініціалізації змінних перевіряти ці змінні.

---
Питання стосується всих змінних, а не тільки сесійних.
---
Якщо робити перевірку кожної змінної, то час виконання скрипта умовно можна розподілити так: 90% непотрібна(?) перевірка, 10% корисна робота.

Хоча майже всі (в дуже загальному понятті) алгоритми складаються з перевірок та прийняття рішень.

по

  • Гість
Про перевірки обов’язкових змінних - гадаю що в кожному коді є критичні змінні і не критичні

по

  • Гість
Звісно що в коді що працює із цими критичними змінними у мене є їх обробка і якщо вони мають не таке значення як потрібно, то...

А чи до/після ініціалізації потрібно перевіряти?

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Я, звісно, пон…тік думок не вловив, але чому не мати бінарну змінну, яка буде перемикачем (triger), що означає, що додаткові змінні існують?

Коротше, потрібно бачити код і чітку вимогу.

по

  • Гість
угу, я спеціально узагальнив питання - від цього воно стало складним для сприйняття. Зараз буде конкрето:

Є завантаження (первинна ініціалізація змінних) профілю користувача в сесію:

... отримання значень із бд
...
*1*

    $_SESSION['uid'] = $useruid;
    $_SESSION['usname'] = $usname;
    $_SESSION['usfoto'] = $usfoto;
    $_SESSION['r2sh'] = $r2sh_usopt;
...

**2**

Далі десь в ІНШИХ місцях коду є обробка  цих сесійних значень.
---
Але чи потрібно перевіряти змінні *ДО* (чи **ПІСЛЯ**) їх завантаження в сесію?


по

  • Гість
зірочками я вказав місце перевірки: *1* - до початку, **2** - після.
---


Про кількість зайвих(?) перевірок я вище написав. Бо якщо ці змінні все рівно в інших частинах коду перевіряються, то який сенс їх перевіряти до чи після встановлення (у наведених рядках коду, в попереньому повідомленні).

В цьому і полягає ступінь ідіотизму.

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0
Однаково — надто далекий рівень абстракції. Треба конкретніше.

Залежно від архітектури системи. Якщо швидкодія не критична, то перевіряйте одразу. Якщо трохи критична, то проіндексуйте таблицю. Але, знов-таки, потрібно розуміти всю архітектуру і задачу, щоб надати якісну відповідь.

Абстракте питання — абстрактна відповідь.

по

  • Гість
Вчора писав відповідь... - Укртіліком - наше фсь0  ;D . При чому тільки до мене подзвонив укртелекомівський робобот з пропозицією оцінати якість послуг і через кілька хвилин "інтернет кончився".
---

Однаково — надто далекий рівень абстракції. Треба конкретніше.

Залежно від архітектури системи. Якщо швидкодія не критична, то перевіряйте одразу. Якщо трохи критична, то проіндексуйте таблицю. Але, знов-таки, потрібно розуміти всю архітектуру і задачу, щоб надати якісну відповідь....

Абстракте питання — абстрактна відповідь.

ооо, я зрозумів що ви мене не зрозуміли . Моє уточнююче питання більш абстрактніше, ніж ви подумали. Мова не про конкретну таблицю, а взагалі-по-загалях.

Дякую, ви хоч намагались зрозуміти про що мова.

gdekjifgb

  • Гість
... надто далекий рівень абстракції. Треба конкретніше.
Не знаю чи зрозуміло я вище пописав. Не знаю чи хтось вірно мене зрозумів. АЛЕ відповідь я зрозумів, АЛЕ знову запитую/перепитую:

1. Абстрактно: Чи потрібно перевіряти помилки, що практично НЕ можуть виникнути, але теоретично можуть статись. Чи потрібно перевіряти і обробляти (понятно що обробка помилок без їх виловлювання і визначення - неможлива) такі помилки як у натсупному прикладі.
if ($a = $b){     //jоперація ПРИСВОЄННЯ
//щось робити
}else{
//робити щось інше.  моливо вивести повідомлення про помилку і завершити виконання алгоритму (програми).
}

Це  продовження питань або ПЕРШЕ питання дуже абстрактного типу.

Я розумію що в дійсності таких перевірок ніхто ніколи ніде не використовує.
---
2. Переходжу до цілком реальної ситуації. Спочатку опишу чому і як вона виникла. Під час тестувань роботи коду із таблицями БД, я зміни в таблиці  вносив руками, ну щоб мишою не тикати по вебінтерфейсу. І випадково, а може і  не випадково вніс в таблицю дані, що порушують цілісність БД. Конкретніше: я ввів в поле таблиці ід користувача якого неіснує і ніколи не було в бд.

Запит вернув не вірні дані. На сторінці в браузері відобразилось те що не повинно було показуватись (або нічого не відобразилось).

Друге питання таке саме, як і на перше, тільки я вище описав цілком реальну ситуацію.

Порушення цілісності БД не повинно ставатись, АЛЕ якщо консистетність, цілісність БД буде порушено, то якщо в коді постійно "перевіряти цілісність БД" (тобто дуже жорсто і скрізь і завжди робити перевірки результатів запитів та всього що повязано із запитами - вхідні переметри запиту, тільки що прийшов в голову чудовий приклад: Якщо перед кожним запитом перевіряти найвність конкретної таблиці і поля в ній - ну а раптом такої таблиці нема - буде помилка), то php-код уже не буде кодом. То буде оргічнодобривний* код.

Що можна почитати, що допоможе подумати в цьому випадку?

---
* ви ж іще не забули що таке "органічне добриво"?
« Змінено: 2017-04-03 23:39:13 від gdekjifgb »

Відсутній Re.

  • Загальний модератор
  • Літератор
  • *****
  • дописів: 1898
  • Карма: +1/-0

gdekjifgb

  • Гість
спс, гляну.

---
вже подивився - там нема відповіді на мої питання. Там тільки описано як отримувати доступ до  скл  в\із  php. Потрібно щось при обробку помилок (з поясненям на абстрактному рівні і на конкретних прикладах), але я не можу сформулювати гуглєфразу для пошуку.  :( ???
---
http://php.net/manual/en/function.set-error-handler.php - але я це вже використовую в коді (мабуть не правильно ???).
 
« Змінено: 2017-04-04 10:38:58 від gdekjifgb »