Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyjątki w środku klasy
Forum PHP.pl > Forum > Przedszkole
Matado
Czy można bezproblemowo umieszczać wyjątki w klasie? np. przy połączeniu z bazą danych? Czy nie powinno raczej się tego robić? Np. taki przykład

  1. <?php
  2. class Something
  3. {
  4.  
  5.    public function __construct()
  6.    {
  7.        try
  8.        {
  9.           // jakis kod
  10.        }
  11.        catch (PDOException $e)
  12.        {
  13.           // wyswietlanie błędu
  14.        }
  15.    }
  16. }
  17. ?>
Procesor
NIe ma żadnej przeszkody w umieszczaniu try-catch wewnątrz klasy. Ale istnieje wygodniejsza wersja:

  1. <?php
  2. class Something
  3. {
  4.   public function __construct()
  5.   {
  6.  if($costam)
  7.  {
  8.      throw new Exception("costam");
  9.  }
  10.   } 
  11. }
  12.  
  13.  try
  14.   {
  15.   // wywolanie klas np.
  16.   $something= new Something;
  17.   // i inne operacje
  18.   }
  19.   catch (PDOException $e)
  20.   {
  21.   // wyswietlanie błędu
  22.   }
  23.  
  24.  
  25. ?>


W takim wypadku możesz swobodnie korzystać z wyjątków w wszystkich funkcjach wywołanych w try, bez potrzeby powtarzania try i catch.
Matado
Ok. Chciałbym się jeszcze o coś jeszcze zapytać. Czy macie jakiś sposób, żeby skrócić długość if'a przy sprawdzaniu czy formularz został wypełniony? Chodzi o empty() . Bo jak formularz ma długą nazwę to strasznie się wydłuża cały if. Podoba mi się rozwiazanie z frameworka Kohany. Wystarczy wpisać if ($this->input->post() i jest, a tu strasznie się if wydłuża.
Procesor
Możesz napisać funkcje sprawdzającą wszystkie zmienne przekazane z formularza i zwracającą true w wypadku gdy wszystkie dane z formularza są wypełnione.
Crozin
Cytat
Ale istnieje wygodniejsza wersja:
Jak może być wygodniejsza, skoro z założenia jej celem jest co innego.
A co do tego czy będzie potrzebował bloku try-catch wewnątrz czy na zewnątrz klasy to już sam zadecyduje, w zależności od tego czego oczekuje.

Co do walidacji. Polecałbym zobaczyć jak problem walidacji danych z formularzy rozwiązano np. w popularnych frameworkach i napisać własny system (ew. skorzystać z już istniejących) który przejąby całą obsługę walidacji, bo jest to chyba najbardziej irytująca część pracy w przypadku tworzenia aplikacji.
Procesor
Pisząc "wygodniejsza" miałem na myśli pracę z throw, bo powtarzanie wewnątrz klasy 100 razy bloku try-catch w takim wypadku nie jest zbytnio wydajne.
Matado
Dzięki za odpowiedzi. Zobaczę jak w Kohanie to jest zrobione. A co do wyjątku to będzie tylko raz użyty.
Procesor
No to w takim wypadku jak mówisz, jednak lepiej użyć try/catch wewnątrz klasy.
Crozin
Jeżeli z góry zakłada, że nie chce obsłużyć wyjątków PDO to poprostu nie obsługuje ich w obiekcie:
  1. <?php
  2. class abc{
  3.  public function def(){
  4.    $this->pdo->doSth();
  5.  }
  6. }
  7.  
  8. try{
  9.  $a = new abc();
  10.  $a->def();
  11. }catch(PDOException $pdoe){
  12.  //...
  13. }
  14. ?>
Nie ma potrzeby rzucania jeszcze własnych wyjątków.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.