Podstawy programowania II dr inż. Paweł Róg 1 Zagadnienia % Obsługa błędów w PHP5 ą Wyjątki, wyrzucanie i przechwytywanie wyjątków ą Uzyskiwanie informacji z wyjątku ą Klasa Exception ą Tworzenie własnych klas wyjątków % Podstawy XML (wg W3C) ą XML służy do budowania struktur danych ą XML przypomina HTML ą XML jest tekstem, ale nie należy go czytać ą XML jest nadmiarowy ą XML to rodzina technologii ą XML to nowość, ale bez przesady ą XML prowadzi HTML do XHTML ą XML jest modularny ą XML jest podstawą RDF i Semantic Web - Znaczeniowej Sieci ą XML nie jest licencjonowany, jest niezależny od platformy i ma duże zaplecze 2 Wyrzucanie wyjątku if (mamy problem) { throw new Exception('Ups, wygląda na to, że mamy problem'); } 3 Wyłapywanie wyjątku try { // kod, ktróy może wyrzucać wyjątki } catch (Exception $e) { // obsługa wyjątku } 4 try { // przetwarzany skrypt } catch (InvalidDataException $e) { // przekieruj użytkownika do strony //z formularzem i komunikatem o błędzie } catch (DatabaseErrorException $e) { // przekieruj użytkownika do strony // z komunikatem o błędzie bazodanowym } catch (Exception $e) { // obsłuż pozostałe wyjątki } 5 Uzyskiwanie informacji o wyjątku % Klasa Exception posiada następujące metody, umożliwiające uzyskanie informacji o wyjątku: ą getMessage() ą getCode() ą getFile() ą getLine() ą getTrace() ą getTraceAsString() ą __toString() 6 getMessage() % Metoda getMessage() zwraca tekst komunikatu przekazany jako pierwszy argument podczas wyrzucania wyjątku. 7 ą getCode() % Metoda getCode() zwraca kod błędu przekazany jako drugi opcjonalny argument podczas wyrzucania wyjątku. Domyślną wartością jest 0. 8 ą getFile() % Metoda getFile() zwraca nazwę pliku z definicją klasy. 9 ą getLine() % Metoda getLine() zwraca numer linii, w której wyjątek został wyrzucony. 0 1 ą getTrace() % Metoda getTrace() zwraca tablicę zawierającą szczegółowe informacje dotyczące kontekstu wyrzucenia wyjątku, m.in.: nazwę pliku, numer linii, nazwę metody, argumenty. 1 1 ą __toString() % Metoda __toString() zwraca ciąg tekstowy, którego zawartość jest kombinacją informacji zwracanych przez getMessage() i getTraceAsString(). Ta metoda, w przeciwieństwie do pozostałych, które są finalne, może zostać nadpisana w klasach pochodnych do Exception. 2 1 ą getTraceAsString() % Metoda getTraceAsString() zwraca ciąg tekstowy zawierający informacje zwracane przez getTrace(). 3 1 Przykład try { throw new Exception('coś złego!'); } catch (Exception $e) { print "Metoda getMessage() zwraca: {$e- >getMessage()} "; print "Metoda getCode() zwraca: {$e->getCode()}
\n"; print "Metoda getTraceAsString() zwraca: {$e- >getTraceAsString()} \n"; print "A teraz po prostu wyświetlamy obiekt wyjątku: $e\n"; } 4 1 Wynik działania skryptu Metoda getMessage() zwraca: coś złego! Metoda getCode() zwraca: 0 Metoda getFile() zwraca: C:\wamp\www\skrypty\exception.php Metoda getLine() zwraca: 3 Metoda getTrace() zwraca: Array Metoda getTraceAsString() zwraca: #0 {main} A teraz po prostu wyświetlamy obiekt wyjątku: exception 'Exception' with message 'coś złego!' in C:\wamp\www\skrypty\exception.php:3 Stack trace: #0 {main} 5 1 Klasa Exception % Poza wymienionymi metodami, klasa Exception posiada także chronione (protected) pola: ą $message ą $code ą $file ą $line 6 1 $message % Pole $message przechowuje opis wyjątku. Domyślną wartością tego pola jest 'Unknown exception'. 7 1 $code % Pole $code przechowuje kod błędu. Domyślną wartością tego pola jest 0. 8 1 $file % Pole $file przechowuje nazwę pliku z definicją klasy, z której został wyrzucony wyjątek. 9 1 $line % Pole $line przechowuje numer linii, z której został wyrzucony wyjątek. 0 2 Tworzenie własnych klas wyjątków class ArithmeticException extends Exception {} function podziel ($a, $b) { if ($b == 0) throw new ArithmeticException('Dzielenie przez zero!'); return $a / $b; } try { Podziel (2, 0); } catch (ArithmeticException $e) { print "Błąd arytmetyczny: {$e->getMessage()}\n"; } catch (Exception $e) { print "Błąd: {$e->getMessage()}\n"; } 1 2 Wynik działania skryptu Błąd arytmetyczny: Dzielenie przez zero! 2 2 1. XML służy do ... % XML służy do budowania struktur danych Na ustrukturyzowane dane składają się formularze, książki adresowe, parametry konfiguracyjne, operacje finansowe, rysunki techniczne i wiele innych. XML to zestaw reguł (można go traktować również jako wytyczne czy konwencję) do projektowania formatów, na których oparte zostaną dane. XML nie jest językiem programowania i nie trzeba być programistą, by z nie go korzystać. XML sprawia, że generowanie danych i ich odczyt są znacznie łatwiejsze, zapewniając przejrzystą ich strukturę. Konstruując XML twórcy uniknęli typowych błędów zawartych w innych językach: jest on rozszerzalny, niezależny od platformy, wspomaga lokalizowanie produktów. XML jest w pełni kompatybilny ze standardem Unicode. 3 2 2. XML przypomina HTML % XML przypomina HTML Podobnie jak HTML, XML korzysta z tagów (słowa ujęte w '<' i '>') oraz atrybutów (w postaci nazwa="wartość"). Podczas gdy HTML definiuje dokładne znaczenia każdego z tagów i jego atrybutów, jak również ich wygląd w przeglądarce, XML używa tagów tylko do rozgraniczenia pewnej części dokumentu, a interpretację znaczenia pozostawia aplikacji odczytującej te dane. Inaczej mówiąc, gdy zobaczysz "
" w dokumencie XML nie oznacza to, że w tym miejscu znajduje się paragraf, jak to ma miejsce w HTML. W zależności od kontekstu taki tag może oznaczać parametr, pisarza, poetę, powiat, p... (i wcale nie jest powiedziane, że musi zaczynać się na "p"). 4 2 3. XML jest tekstem... % XML jest tekstem, ale nie należy go czytać Często się zdarza, że programy korzystające z formularzy, książek adresowych i innych sformatowanych danych przechowują swoje dane na dysku, zapisując je zarówno w postaci binarnej, jak i tekstowej. Dużą zaletą postaci tekstowej jest to, że użytkownik, jeśli to tylko konieczne, może przeglądać dane bez potrzeby korzystania z dodatkowych aplikacji; ostatecznie można odczytać dane korzystając z edytora tekstu. Postać tekstowa pozwala również wykonawcy na łatwiejsze lokalizowanie i usuwanie błędów w aplikacjach. Podobnie jak HTML, pliki XML są tekstowe i, choć nie powinny być przeglądane przez osoby postronne, mogą być gdy zajdzie taka potrzeba. 5 2 Jednak w przeciwieństwie do HTML, reguły dotyczące plików XML są ścisłe i nienaruszalne. yle napisany tag, zgubiony nawias czy atrybut nie ujęty w cudzysłów czyni plik XML bezużytecznym, podczas gdy w HTML taka praktyka jest tolerowana, a często nawet jawnie dozwolona. Oficjalna specyfikacja języka XML zabrania aplikacjom domyślać się co ma znaczyć dany fragment uszkodzonego plik XML; jeśli w pliku jest błąd, program powinien wstrzymać wykonywanie i zgłosić błąd. 6 2 4. XML jest nadmiarowy % XML jest nadmiarowy Z powodu zastosowania postaci tekstowej i używania tagów do rozgraniczenia danych, pliki XML są znacząco większe niż pliki binarne z takimi samymi danymi. To świadoma decyzja projektantów języka XML. Korzyści płynące z postaci tekstowej są znaczące (patrz punkt 3. XML jest tekstem...), a wady takiego rozwiązania mogą być łatwo skompensowane. Miejsce na dysku twardym jest znacznie tańsze niż dawniej, a programy do kompresji takie jak zip czy gzip pakują pliki szybko i skutecznie. Dodatkowo protokoły komunikacyjne służące np. do transmisji modemowej czy HTTP/1.1, będący podstawą Sieci, kompresują pliki w locie, zachowując przepustowość łącza. 7 2 5. XML to rodzina technologii % XML to rodzina technologii XML 1.0 jest specyfikacją, która definiuje czym są "tagi" i "atrybuty". Oprócz XML 1.0 na "rodzinę XML" składa się stale rosnący zestaw modułów, które oferują usługi przydatne do wypełnienia ważnych i częstych zadań. Xlink Opisuje standardowy sposób dodawania odnośników do plików XML, XPointer i XFragments to sposoby na wskazywanie na daną część dokumentu XML. XPointer przypomina trochę odnośnik URL, jednak zamniast wskazywać na dokument w sieci, wskazuje na dane zawarte w pliku XML. CSS, język opisu stylu strony, można stosować w odniesieniu do XML w taki sam sposób jak do HTML. 8 2 XSL jest zaawansowanym językiem do określania stylu strony. bazuje na XSLT, języku transformacji, służącym do dodawania, usuwania oraz modyfikowania tagów i atrybutów. DOM jest zestawem standardowych funkcji służących do manipulowania plikami XML (i HTML) z poziomu języka programowania. XML Schemas 1 i 2 pomagają programistom precyzyjnie określać strukturę tworzonych formatów na bazie XML. Wiele innych modułów i narzędzi jest już dostępnych, lub znajdują się jeszcze w fazie produkcji. Informacje można odnalezć na stronie technicznych raportów organizacji W3C (http://www.w3.org/TR/). 9 2 6. XML to nowość, ale bez przesady % XML to nowość, ale bez przesady Początek XML to rok 1996, a do roku 1998 był tzw. rekomendacją W3C, co może sprawić wrażenie, że nie jest to najświeższa technologia. Rzeczywiście, technologia nie jest nowa. Zanim powstał XML, był jeszcze SGML stworzony już na początku lat 80-tych, w roku 1986 został standardem ISO, powszechnie używany do tworzenia dokumentacji dużych projektów. Rozwój HTML to rok 1990. Projektanci XML po prostu zostawili najlepsze części specyfikacji SGML i mając na uwadze doświadczenia z językiem HTML, stworzyli rzecz nie gorszą od oryginału, a znacznie bardziej prostą i przejrzystą. 0 3 Jednakże niektóre ewolucje trudno odróżnić od rewolucji... I trzeba przyznać, że podczas gdy SGML jest przeważnie używany do technicznej dokumentacji, pomijając wszelkie inne dane, z XML jest dokładnie odwrotnie. 1 3 7. XML prowadzi HTML do XHTML % XML prowadzi HTML do XHTML Jest jedna ważna aplikacja XML, to XHTML, następca HTML. XHTML ma wiele wspólnych elementów z HTML. Składnia została lekko zmieniona, by dostosować ją do wymogów XML. Dokument, który "bazuje na XML" dziedziczy składnie i zasady XML w pewien określony sposób (np. XHTML dopuszcza "
", ale nie ""); nadaje też znaczenia ustalonym tagom (w XHTML "
" oznacza zawsze "paragraf", a nie "pisarza", "powiat" czy cokolwiek innego). 2 3 8. XML jest modularny % XML jest modularny XML pozwala na zdefiniowanie nowego formatu poprzez łączenie lub korzystanie z innego. Ponieważ różne formaty są tworzone zupełnie niezależnie, mogą mieć tagi lub atrybuty o takiej samej nazwie, co powoduje dwuznaczność przy łączeniu takich dokumentów (np. w jednym "
" oznacza "paragraf", a w innym "pisarza"). W celu wyeliminowania takiej dwuznaczności w XML wprowadzona mechanizm przestrzeni nazw. Dobrymi przykładami dokumentów korzystających z przestrzeni nazw są XSL i RDF. XML Schema został zaprojektowany, by odzwierciedlać to wsparcie dla modularności na poziomie definiowania struktury dokumentu XML, ułatwiając połączenie dwóch schematów w celu stworzenia trzeciego, który obejmuje strukturę połączonych dokumentów. 3 3 9. XML jest podstawą ... % XML jest podstawą RDF i Semantic Web Znaczeniowej Sieci Resource Description Framework (RDF szkielet do opisu zasobów) to dokument XML, który wspomaga opis zasobów i metadanych aplikacji, takich jak lista piosenek, kolekcja fotografii i bibliografie. Na przykład RDF może pozwolić użytkownikowi na rozpoznanie osób na fotografii w internecie używając informacji z książki adresowej; następnie klient pocztowy wyśle informacje do tych osób, że ich zdjęcie pokazało się w sieci. Tak jak HTML łączy dokumenty, menu i formę aplikacji, co tworzy oryginalny, znany nam internet, tak RDF integruje szereg aplikacji w jedną Znaczeniową Sieć. 4 3 Tak jak ludzie potrzebują uzgodnić znaczenie słów jakimi się posługują przy rozmowie, tak komputery potrzebują mechanizmu ustalającego znaczenie terminów używanych we wzajemnej komunikacji. Opisy formalne takich terminów w określonych obszarach (np. sprzedaż lub produkcja) nazwane są ontologiami i są niezbędnym elementem Znaczeniowej Sieci. RDF, ontologie i reprezentacja treści tak, aby komputery mogły lepiej wspomagać ludzi to tematy poruszane w Znaczeniowej Sieci. 5 3 10. XML nie jest licencjonowany... % XML nie jest licencjonowany, jest niezależny od platformy i ma duże zaplecze Wybierając XML jako podstawę projektu, uzyskuje się dostęp do olbrzymiej i ciągle rosnącej bazy narzędzi (a być może jedno z nich już robi to czego potrzebujesz) oraz profesjonalistów doświadczonych w tej technologii. Wybór XML to coś jakby wybór SQL do baz danych; wciąż potrzeba zrobić własną bazę danych i aplikację z procedurami operującymi na niej, ale jest całe zaplecze narzędzi i ludzi mogących udzielić pomocy. Ponieważ XML jest wolny od opłat licencyjnych, tworzenie własnej aplikacji nie wymaga dodatkowych kosztów. Olbrzymie zaplecze, które wciąż się powiększa, oznacza, że producent oprogramowania nie jest już związany z jednym dostawcą rozwiązań. 6 3 XML nie zawsze musi być najlepszym rozwiązaniem, ale zawsze trzeba je rozpatrzyć. 7 3 Przykład dokumentu XML Bartek Alicja Przypomnienie Nie zapomnij o jutrzejszym wieczorze!
8 3 Lista HTML ...
Duszona ryba
Pieczone podroby drobiowe
Ucho morskie z kabaczkiem
9 3 ... zgodna z XML
Duszona ryba
Pieczone podroby drobiowe
Ucho morskie z kabaczkiem
0 4 Obiekt SimpleXML $kanal =<<<_XML_ Co jest na obiad? http://menu.przyklad.com/ Poniżej znajdują się możliwe do wyboru posiłki na wieczór.
_XML_; $xml = simplexml_load_string($kanal); 1 4 Dostęp do struktury print "Kanał $xml->title jest dostępny pod adresem $xml->link. "; print "Jego opis to: \"$xml->description\""; 2 4 Przykład 1 $menu=<<<_XML_
Co jest na obiad? http://menu.przyklad.com/ Poniżej znajdują się możliwe do wyboru posiłki na wieczór. Duszona ryba http://menu.przyklad.com/potrawy.php? potrawa=ryba Delikatny owoc morza, który Cię pożywi i pokrzepi.
3 4 Pieczone podroby drobiowe z solą http://menu.przyklad.com/potrawy.php? potrawa=podroby Bogata w tłuszcze i węglowodany potrawa parzona z solą i przyprawami.
Ucho morskie z kabaczkiem http://menu.przyklad.com/potrawy.php? potrawa=uchowiec Nie można pomylić tej wyjątkowej przyjemności płynącej z konsumpcji ucha morskiego.
_XML_; 4 4 $xml = simplexml_load_string($menu); print "Kanał {$xml->channel->title} jest dostępny pod adresem {$xml->channel->link}. "; print "Jego opis to: \"{$xml->channel->description}\""; 5 4 Wynik działania skryptu Kanał Co jest na obiad? jest dostępny pod adresem http://menu.przyklad.com/. Jego opis to: "Poniżej znajdują się możliwe do wyboru posiłki na wieczór." 6 4 Dostęp do atrybutów print 'Ten RSS jest w wersji ' . $xml['version']; 7 4 Elementy o identycznych nazwach print "Tytuł: " . $xml->channel->item[0]->title . "\n"; print "Tytuł: " . $xml->channel->item[1]->title . "\n"; print "Tytuł: " . $xml->channel->item[2]->title . "\n"; 8 4 Wykorzystanie foreach foreach ($xml->channel->item as $element) { print "Tytuł: " . $element->title . "\n"; } 9 4 ... foreach ($xml->channel->item[0] as $nazwa_elementu => $zawartosc) { print "$nazwa_elementu to $zawartosc\n"; } 0 5 Modyfikacja elementów i atrybutów $xml['version'] = '6.3'; $xml->channel->title = strtoupper($xml->channel->title); for ($i = 0; $i < 3; $i++) { $xml->channel->item[$i]->link = str_replace('menu.przyklad.com', 'obiad.przyklad.org', $xml->channel->item[$i]- >link); } 1 5 Przykład 2 $menu=<<<_XML_
Co jest na obiad? http://menu.przyklad.com/ Poniżej znajdują się możliwe do wyboru posiłki na wieczór. Duszona ryba http://menu.przyklad.com/potrawy.php? potrawa=ryba Delikatny owoc morza, który Cię pożywi i pokrzepi.
2 5 Pieczone podroby drobiowe z solą http://menu.przyklad.com/potrawy.php? potrawa=podroby Bogata w tłuszcze i węglowodany potrawa parzona z solą i przyprawami.
Ucho morskie z kabaczkiem http://menu.przyklad.com/potrawy.php? potrawa=uchowiec Nie można pomylić tej wyjątkowej przyjemności płynącej z konsumpcji ucha morskiego.
_XML_; 3 5 // Tworzenie obiektu SimpleXML. $xml = simplexml_load_string($menu); // Modyfikacja obiektu SimpleXML. $xml['version'] = '6.3'; $xml->channel->title = strtoupper($xml->channel->title); for ($i = 0; $i < 3; $i++) { $xml->channel->item[$i]->link = str_replace('menu.przyklad.com','obiad.przyklad.org', $xml->channel->item[$i]->link); } // Wyślij dokument XML do klienta WWW. header('Content-Type: text/xml'); print $xml->asXML(); ?> 4 5 Wynik działania skryptu CO JEST NA OBIAD? http://menu.przyklad.com/ Poniżej znajdują się możliwe do wyboru posiłki na wieczór. Duszona ryba http://obiad.przyklad.org/potrawy.php?potrawa=ryba Delikatny owoc morza, który Cię pożywi i pokrzepi.
Pieczone podroby drobiowe z solą http://obiad.przyklad.org/potrawy.php?potrawa=podroby Bogata w tłuszcze i węglowodany potrawa parzona z solą i przyprawami.
Ucho morskie z kabaczkiem http://obiad.przyklad.org/potrawy.php?potrawa=uchowiec Nie można pomylić tej wyjątkowej przyjemności płynącej z konsumpcji ucha morskiego.
5 5 Zdalny element XML $xml = simplexml_load_file('http://rss.news.yahoo.com/r ss/oddlyenough'); print "
\n"; foreach ($xml->channel->item as $element) { print "
$element->title
\n"; } print "
"; 6 5 Zapisanie do pliku $xml = simplexml_load_file('http://rss.news.ya hoo.com/rss/oddlyenough'); $xml->asXML('odd.xml'); 7 5 Generowanie dokumentu XML $channel = array('title' => "Co jest na obiad?", 'link' => 'http://menu.przyklad.com/', 'description' => 'Poniżej znajdują się możliwe do wyboru posiłki na wieczór.'); print "\n"; foreach ($channel as $element => $zawartosc) { print " <$element>"; print htmlentities($zawartosc); print "\n"; } print ""; 8 5 Wynik działania skryptu Co jest na obiad? http://menu.przyklad.com/ Poniżej znajdują się możliwe do wyboru posiłki na wieczór.