Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obsługa wyjątków, Pojawianie się Warning
mimol
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Napisałem sobie klasę Osoba, aby przetestować na niej działanie wyjątków (chyba nie do końca powinny być tu stosowane, ale nic innego nie przychodzi mi do głowy)
  1. <?php
  2. class Peron{
  3. private $_name;
  4. private $_surname;
  5. private $_age;
  6.  
  7. public function __construct($data){
  8. if(empty($data['name']) || empty($data['surname']) || empty($data['age']) || !is_int($data['age'])){
  9. throw new Exception ('Some data is missing or is wrong');
  10. }
  11. $this->_age=$data['age'];
  12. $this->_surname=$data['surname'];
  13. $this->_name=$data['name'];
  14.  
  15. }
  16. public function __toString(){
  17. return 'Name '.$this->_name.' Surname '.$this->_surname.' Age '.$this->_age;
  18. }
  19. }
  20. $data = array('surname'=>'Smith','name'=>'John','age'=>22);
  21. try{
  22. $person = new Peron();
  23. echo 'Person created';
  24. }catch(Exception $exception){
  25. echo 'Sth goes wrong :( '.$exception;
  26. }
  27.  
  28. ?>

Mimo iż zastosowałem wyjątki dostaję na wyjściu
Kod
Warning: Missing argument 1 for Peron::__construct(), called in C:\xampp\htdocs\wyjatek\index.php on line 23 and defined in C:\xampp\htdocs\wyjatek\index.php on line 7
Sth goes wrong :( exception 'Exception' with message 'Some data is missing or is wrong' in C:\xampp\htdocs\wyjatek\index.php:9 Stack trace: #0 C:\xampp\htdocs\wyjatek\index.php(23): Peron->__construct() #1 {main}

1)Dlaczego pojawia mi się ten warning?(pierwsza linijka) i co zrobić by się nie pojawiał, jak to powinno być poprawnie zrobione?
2)Wydaje mi się, że ten warning zawiera 'ciekawsze' informacje, które sa bardziej pomocne niż to co wypuwa wyjątek:P Czy zawsze do wyjątków trzeba pisać po swojemu informacje? co zrobić aby wyjątek również wypluł Missing argument 1 for Peron::__construct() ?
3)Co zrobić jeśi miałbym kod
  1. //definicja klasy
  2. try{
  3. $person = new Peron();
  4. echo 'Person created';
  5. }catch(Exception $exception){
  6. echo 'Sth goes wrong :( '.$exception;
  7. }
  8. ..............................
  9. ..Bardzo dużo kodu..
  10. ..............................
  11. i teraz chciałbym zapisać Osobę do np piku
  12. file->save($person) // oczywiście chciałbym sprawdzić czy Osoba została poprawnie wygenerowana, a przercież w TRY nie dam całego kodu(którego jest bardzo dużo). W funkcji save nie sprawdzam czy $person jest poprawna bo jeśi nie jest to funkcja nie powinna byc w ogóle uruchamiana.
  13. Rozwiązanie, żeby robić jakieś boole wydaje mi się bez sesnu.

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mimol
post
Post #2





Grupa: Zarejestrowani
Postów: 247
Pomógł: 5
Dołączył: 10.12.2007

Ostrzeżenie: (0%)
-----


Dzięki za odpwiedzieć.
A czy jest jakiś sposób na pzeciążenie (załóżmy, że chciabym również podawać dane nie w tabicy a jako osobne stringi)
Czy w PHP trzebra robić klasy które dziedziczą i tam na nowo definiować konstruktor?

Odnośnie pytania nr3
Chcę sobie utworzyć obiekt $osobia klasy Osoba a potem zapisać go do piku (to już obsługuje inna funkcja)
  1. $osoba = new Osoba;
  2. //Tutaj jest długi kod np, kolorowanie nazwy, zamina wieku na postać rzymska
  3. $plik->save($osoba) // tutaj chcę zapisać $osobę do piku

Chciałbym to obsużyć na wyjątkach (jeśi osoba nie powstanie to nie chce jej zapisać do piku tylko wyswielic stosowny komunikat). Jednak nie widzę sesnu dawać mojego całego kodu w bok Try. Jak to inaczej rozwiązać (nie chcę również sprwadzać w klasie Plik czy $osoba istnieje, klasa Osoba powinna się tym zająć).

Jedyne rozwiązanie jakie przychodzi mi do głowy to własnie
  1. try{
  2. $osoba = new Osoba;
  3. $plik->save($osoba)
  4. //ten długi kod
  5. } catch (Exception $exception){
  6. echo 'cos nie tak';
  7. }
  8.  


Cytat
Obsługa błędów jest to jeden z istotniejszych elementów współczesnych aplikacji. Początkujący programiści często ją bagatelizują, kompletnie nie przejmując się tym, że przy złych ustawieniach na ekranie przeglądarki pojawia się 500 ostrzeżeń PHP, albo załatwiając sprawę najprostszą komendą die(). Wykorzystują to hakerzy, dla których ścieżki dostępu, nazwy plików i numery linii wyświetlane przy komunikatach PHP to znakomite źródło informacji o serwerze, skrypcie oraz umiejętnościach programisty.

Jak wyłączyć w wyjątkach aby nie pojawiała się ścieżka / nr lini?

Ten post edytował mimol 22.08.2012, 09:13:16
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 16:30