Podstawy programowania II 4

background image

1

Podstawy programowania II

dr inż. Paweł Róg

background image

2

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

background image

3

Wyrzucanie wyjątku

if (mamy problem) {

throw

new

Exception

('Ups, wygląda na

to, że mamy problem');
}

background image

4

Wyłapywanie wyjątku

try

{

// kod, ktróy może wyrzucać wyjątki
}

catch

(

Exception $e

) {

// obsługa wyjątku

}

background image

5

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

}

background image

6

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()

background image

7

getMessage()

Metoda getMessage() zwraca tekst komunikatu
przekazany jako pierwszy argument podczas
wyrzucania wyjątku.

background image

8

getCode()

Metoda getCode() zwraca kod błędu
przekazany jako drugi opcjonalny argument
podczas wyrzucania wyjątku. Domyślną wartością
jest 0.

background image

9

getFile()

Metoda getFile() zwraca nazwę pliku
z definicją klasy.

background image

10

getLine()

Metoda getLine() zwraca numer linii, w której
wyjątek został wyrzucony.

background image

11

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.

background image

12

__toString()

Metoda __toString() zwraca ciąg tekstowy,
którego zawartość jest kombinacją informacji
zwracanych przez
getMessage()
getTraceAsString(). Ta metoda,
w przeciwieństwie do pozostałych, które są
finalne, może zostać nadpisana w klasach
pochodnych do
Exception.

background image

13

getTraceAsString()

Metoda getTraceAsString() zwraca ciąg
tekstowy zawierający informacje zwracane przez
getTrace().

background image

14

Przykład

try {
throw new Exception('coś złego!');
} catch (Exception $e) {
print "Metoda getMessage() zwraca: {$e-
>getMessage()} </br>";
print "Metoda getCode() zwraca: {$e->getCode()}
</br>\n";
print "Metoda getFile() zwraca: {$e->getFile()}
</br>\n";
print "Metoda getLine() zwraca: {$e->getLine()}
</br>\n";
print "Metoda getTrace() zwraca: {$e->getTrace()}
</br>\n";
print "Metoda getTraceAsString() zwraca: {$e-
>getTraceAsString()} </br>\n";
print "A teraz po prostu wyświetlamy obiekt
wyjątku: $e\n";
}

background image

15

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}

background image

16

Klasa Exception

Poza wymienionymi metodami, klasa Exception
posiada także chronione (protected) pola:

$message

$code

$file

$line

background image

17

$message

Pole $message przechowuje opis wyjątku.
Domyślną wartością tego pola jest 'Unknown
exception'.

background image

18

$code

Pole $code przechowuje kod błędu. Domyślną
wartością tego pola jest 0.

background image

19

$file

Pole $file przechowuje nazwę pliku z definicją
klasy, z której został wyrzucony wyjątek.

background image

20

$line

Pole $line przechowuje numer linii, z której
został wyrzucony wyjątek.

background image

21

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";
}

background image

22

Wynik działania skryptu

Błąd arytmetyczny: Dzielenie przez zero!

background image

23

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.

background image

24

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 "<p>" 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").

background image

25

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.

background image

26

Jednak w przeciwieństwie do HTML, reguły dotyczące
plików XML są ścisłe i nienaruszalne
. Źle 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.

background image

27

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.

background image

28

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.

background image

29

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

odnaleźć na stronie technicznych raportów organizacji W3C

(http://www.w3.org/TR/).

background image

30

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ą.

background image

31

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.

background image

32

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 "<p>", ale nie "<r>"); nadaje też znaczenia

ustalonym tagom (w XHTML "<p>" oznacza zawsze

"paragraf", a nie "pisarza", "powiat" czy cokolwiek innego).

background image

33

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 "<p>" 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
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.

background image

34

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ć.

background image

35

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.

background image

36

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ń.

background image

37

XML nie zawsze musi być najlepszym rozwiązaniem, ale

zawsze trzeba je rozpatrzyć.

background image

38

Przykład dokumentu XML

<note>

<to>Bartek</to>
<from>Alicja</from>
<heading>Przypomnienie</heading>

<body>Nie zapomnij o jutrzejszym
wieczorze!</body>

</note>

background image

39

Lista HTML ...

<ul>

<li>Duszona ryba
<li>Pieczone podroby drobiowe
<li>Ucho morskie z kabaczkiem

</ul>

background image

40

... zgodna z XML

<ul>

<li>Duszona ryba</li>
<li>Pieczone podroby drobiowe</li>
<li>Ucho morskie z kabaczkiem</li>

</ul>

background image

41

Obiekt SimpleXML

$kanal =<<<_XML_
<channel>
<title>Co jest na obiad?</title>
<link>http://menu.przyklad.com/</link>
<description>Poniżej znajdują się możliwe do
wyboru posiłki na wieczór.</description>
</channel>
_XML_;

$xml =

simplexml_load_string

($kanal);

background image

42

Dostęp do struktury

print "Kanał

$xml->title

jest dostępny pod

adresem

$xml->link

. ";

print "Jego opis to: \"

$xml->description

\"";

background image

43

Przykład 1

$menu=<<<_XML_

<?xml version="1.0" encoding="utf-8" ?>

<rss version="0.91">

<channel>

<title>Co jest na obiad?</title>

<link>http://menu.przyklad.com/</link>

<description>Poniżej znajdują się możliwe do wyboru

posiłki na wieczór.</description>

<item>

<title>Duszona ryba</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=ryba</link>

<description>Delikatny owoc morza, który Cię pożywi i

pokrzepi.</description>

</item>

background image

44

<item>

<title>Pieczone podroby drobiowe z solą</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=podroby</link>

<description>Bogata w tłuszcze i węglowodany potrawa

parzona z solą i przyprawami.</description>

</item>

<item>

<title>Ucho morskie z kabaczkiem</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=uchowiec</link>

<description>Nie można pomylić tej wyjątkowej

przyjemności płynącej z konsumpcji ucha

morskiego.</description>

</item>

</channel>

</rss>

_XML_;

background image

45

$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}\"";

background image

46

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."

background image

47

Dostęp do atrybutów

print 'Ten RSS jest w wersji ' .

$xml['version'];

background image

48

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";

background image

49

Wykorzystanie foreach

foreach ($xml->channel->item as $element) {
print "Tytuł: " . $element->title . "\n";
}

background image

50

...

foreach ($xml->channel->item[0] as
$nazwa_elementu => $zawartosc) {
print "$nazwa_elementu to $zawartosc\n";
}

background image

51

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);

}

background image

52

Przykład 2

<?php

$menu=<<<_XML_

<?xml version="1.0" encoding="utf-8" ?>

<rss version="0.91">

<channel>

<title>Co jest na obiad?</title>

<link>http://menu.przyklad.com/</link>

<description>Poniżej znajdują się możliwe do wyboru

posiłki na wieczór.</description>

<item>

<title>Duszona ryba</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=ryba</link>

<description>Delikatny owoc morza, który Cię pożywi i

pokrzepi.</description>

</item>

background image

53

<item>

<title>Pieczone podroby drobiowe z solą</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=podroby</link>

<description>Bogata w tłuszcze i węglowodany potrawa

parzona z solą i przyprawami.</description>

</item>

<item>

<title>Ucho morskie z kabaczkiem</title>

<link>http://menu.przyklad.com/potrawy.php?

potrawa=uchowiec</link>

<description>Nie można pomylić tej wyjątkowej

przyjemności płyn±cej z konsumpcji ucha

morskiego.</description>

</item>

</channel>

</rss>

_XML_;

background image

54

// 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()

;

?>

background image

55

Wynik działania skryptu

<rss version="6.3">
<channel>
<title>CO JEST NA OBIAD?</title>
<link>http://menu.przyklad.com/</link>
<description>Poniżej znajdują się możliwe do wyboru posiłki na wieczór.</description>
<item>
<title>Duszona ryba</title>
<link>http://obiad.przyklad.org/potrawy.php?potrawa=ryba</link>
<description>Delikatny owoc morza, który Cię pożywi i pokrzepi.</description>
</item>
<item>
<title>Pieczone podroby drobiowe z solą</title>
<link>http://obiad.przyklad.org/potrawy.php?potrawa=podroby</link>
<description>Bogata w tłuszcze i węglowodany potrawa parzona z solą i
przyprawami.</description>
</item>
<item>
<title>Ucho morskie z kabaczkiem </title>
<link>http://obiad.przyklad.org/potrawy.php?potrawa=uchowiec</link>
<description>Nie można pomylić tej wyj±tkowej przyjemności płynącej z konsumpcji ucha
morskiego.</description>
</item>
</channel>
</rss>

background image

56

Zdalny element XML

$xml =

simplexml_load_file

('http://rss.news.yahoo.com/r

ss/oddlyenough');

print "<ul>\n";
foreach ($xml->channel->item as $element) {
print "<li>$element->title</li>\n";
}
print "</ul>";

background image

57

Zapisanie do pliku

$xml =

simplexml_load_file('http://rss.news.ya
hoo.com/rss/oddlyenough');
$

xml->asXML('odd.xml')

;

background image

58

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 "<channel>\n";
foreach ($channel as $element => $zawartosc)
{
print " <$element>";
print htmlentities($zawartosc);
print "</$element>\n";
}
print "</channel>";

background image

59

Wynik działania skryptu

<channel>
<title>Co jest na obiad?</title>
<link>http://menu.przyklad.com/</link>
<description>Poniżej znajdują się możliwe do
wyboru posiłki na wieczór.</description>
</channel>


Document Outline


Wyszukiwarka

Podobne podstrony:
Podstawy programowania II 1
Podstawy programowania II 2
Podstawy programowania II 6
Podstawy programowania II 5
Podstawy programowania II 3
Podstawy programowania II 1
Podstawy programowania II 5 Dynamiczne struktury danych(1)
PODSTAWA PROGRAMOWA PRZEDMIOTU MATEMATYKA II etap?ukacyjny
PLAN?UKACJI RELIGIJNEJ W ZAKRESIE I,II,III KLASY GIMNAZJUM plus podstawa programowa 2(1)x
PODSTAWA PROGRAMOWA KSZTAŁCENIA OGÓLNEGO, Studia, PWK3 II rok
Analiza stopnia realizacji podstawy programowej w grupie II na rok szkolny 12
Analiza stopnia realizacji podstawy programowej w grupie II na rok szkolny 12
PLAN?UKACJI RELIGIJNEJ W ZAKRESIE I,II,III KLASY GIMNAZJUM plus podstawa programowa 2
Podstawy programowania (wykład II)
Sprawozdanie z realizacji podstawy programowej z edukacji polonistycznej i matematycznej w klasie II
PLAN EDUKACJI RELIGIJNEJ W ZAKRESIE I,II,III KLASY GIMNAZJUM plus podstawa programowa 2
podstawa programowa przedmiotu historia i spoleczenstwo ii etap edukacyjny klasy iv vi zgodna z rozp

więcej podobnych podstron