Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.

Podobne prezentacje


Prezentacja na temat: "Piotr Czapiewski Wydział Informatyki ZUT Wykład 2."— Zapis prezentacji:

1 Piotr Czapiewski Wydział Informatyki ZUT Wykład 2

2

3

4

5

6

7  $this – wskazuje na bieżący obiekt

8  W ciele metody – użycie $this jest konieczne  $this->nazwa – pole klasy  $nazwa – zmienna lokalna Wynik: hau hau Wynik: hau hau Wynik: Wynik:

9  W metodzie statycznej – odnosi się do obiektu wołającego

10

11  Przypisanie istniejącego obiektu do nowej zmiennej  Nowa zmienna będzie odnosić się do tej samej instancji object(Zwierze)#1 (2) { ["gatunek"]=> string(4) "pies" ["odglos"]=> NULL }object(Zwierze)#1 (2) { ["gatunek"]=> string(4) "pies" ["odglos"]=> string(7) "hau hau" }object(Zwierze)#1 (2) { ["gatunek"]=> string(4) "pies" ["odglos"]=> NULL }object(Zwierze)#1 (2) { ["gatunek"]=> string(4) "pies" ["odglos"]=> string(7) "hau hau" }

12  Trzy warianty:  Przypisanie  Referencja  Klonowanie

13 Zwierze { gatunek : "pies" } Zwierze { gatunek : "pies" } $a $b $c $a = new Zwierze("pies"); $b = $a; $c = &$a;

14 Zwierze { gatunek : "żyrafa" } Zwierze { gatunek : "żyrafa" } $a $b $c $a = new Zwierze("pies"); $b = $a; $c = &$a; $b->gatunek = "żyrafa";

15 Zwierze { gatunek : "żyrafa" } Zwierze { gatunek : "żyrafa" } $a $b $c $a = new Zwierze("pies"); $b = $a; $c = &$a; $b->gatunek = "żyrafa"; $a = new Zwierze("kot"); Zwierze { gatunek : "kot" } Zwierze { gatunek : "kot" }

16 Zwierze { gatunek : "pies" } Zwierze { gatunek : "pies" } $a $b $c $a = new Zwierze("pies"); $b = $a; $c = &$a; $b->gatunek = "żyrafa"; $a = new Zwierze("kot"); $c = null;

17  $klon = clone $oryginal  Kopia wszystkich właściwości obiektu  Opcjonalnie: funkcja __clone() Zwierze { gatunek : "pies" } Zwierze { gatunek : "pies" } $a $b $a = new Zwierze("pies"); $b = clone $a; Zwierze { gatunek : "pies" } Zwierze { gatunek : "pies" }

18

19  Brak dziedziczenia wielorakiego  Można nadpisać metody klasy bazowej  Dostęp do nadpisanych metod klasy nadrzędnej – parent::  Nie można nadpisać metody zdefiniowanej jako final

20 var1 => value 1 var2 => value 2 var3 => value 3 var1 => value 1 var2 => value 2 var3 => value 3

21 var1 => value 1 var2 => value 2 var3 => value 3 MyClass::iterateVisible: var1 => value 1 var2 => value 2 var3 => value 3 prot => protected var priv => private var var1 => value 1 var2 => value 2 var3 => value 3 MyClass::iterateVisible: var1 => value 1 var2 => value 2 var3 => value 3 prot => protected var priv => private var

22

23  Standardowe funkcje i wyrażenia nie rzucają wyjątków  Wynik:

24  Rozwiązanie: set_error_handler()

25 PHP Data Objects (PDO)

26 Biblioteki dedykowane Warstwy abstrakcji Mapowanie obiektowo-relacyjne

27 Różne DBMS = różne interfejsy MySQL, PostgreSQL, Oracle, Informix, DB2, Microsoft SQL Server, Firebird, Paradox, Sybase, SQLite… Sposób klasyczny: biblioteki dedykowane PHP Data Objects Różne DBMS = jeden interfejs Nie rozwiązuje problemu niezgodności wersji SQL Warstwa abstrakcji: PDO

28

29

30 $sql = 'SELECT * from ksiazki'; $result = $dbh->query($sql); foreach($result as $row) { $id = $row['id']; $tytul = $row['tytul']; $autor = $row['autor']; echo "{$autor}: {$tytul} "; } $sql = 'SELECT * from ksiazki'; $result = $dbh->query($sql); foreach($result as $row) { $id = $row['id']; $tytul = $row['tytul']; $autor = $row['autor']; echo "{$autor}: {$tytul} "; }

31 print_r($row); Array ( [id] => 2 [0] => 2 [tytul] => PHP dla opornych [1] => PHP dla opornych [autor] => Jan Kowalski [2] => Jan Kowalski [wydawnictwo] => 2 [3] => 2 ) Array ( [id] => 2 [0] => 2 [tytul] => PHP dla opornych [1] => PHP dla opornych [autor] => Jan Kowalski [2] => Jan Kowalski [wydawnictwo] => 2 [3] => 2 ) $id = $row['id']; $id = $row[0]; $t = $row['tytul']; $t = $row[1]; $id = $row['id']; $id = $row[0]; $t = $row['tytul']; $t = $row[1];

32 class Ksiazka { public $id; public $tytul; public $autor; public $wydawnictwo; } $statement = $dbh->query('SELECT * from ksiazki'); $ksiazki = $result->fetchAll(PDO::FETCH_CLASS, 'Ksiazka'); foreach($ksiazki as $k) { echo "{$k->autor}: {$k->tytul}\n"; } class Ksiazka { public $id; public $tytul; public $autor; public $wydawnictwo; } $statement = $dbh->query('SELECT * from ksiazki'); $ksiazki = $result->fetchAll(PDO::FETCH_CLASS, 'Ksiazka'); foreach($ksiazki as $k) { echo "{$k->autor}: {$k->tytul}\n"; }

33

34  Problem:  Budujemy zapytanie na podstawie danych pobranych z żądania HTTP

35

36  Zwykłe połączenie jest zamykane po zakończeniu skryptu  Połączenie trwałe jest zachowywane do późniejszego wykorzystania  Poprawa wydajności  Nie wpływa na funkcjonalność

37

38

39  Rozpoczęcie transakcji  $dbh->beginTransaction();  Zatwierdzenie transakcji  $dbh->commit();  Wycofanie transakcji  $dbh->rollBack();

40

41  Tryby obsługi błędów w PDO  Tryb cichy – PDO::ERRMODE_SILENT ▪ W razie wystąpienia błędu ustawiane są kody błędu w obiektach PDO ▪ Informacje o błędzie do pobrania za pomocą: PDO::errorCode(), PDO::errorInfo()  Tryb ostrzeżeń – PDO::ERRMODE_WARNING ▪ Dodatkowo emitowane ostrzeżenie  Tryb wyjątków – PDO::ERRMODE_EXCEPTION ▪ Rzucany jest wyjątek PDOException

42

43

44

45 Biblioteka Doctrine ORM

46 ORM – Object-Relational Mapping Odwzorowanie obiektów w aplikacji na tabele w bazie danych Operacje na obiektach dziedzinowych zamiast SQL Koncepcja ORM Doctrine ORM, http://www.doctrine-project.orghttp://www.doctrine-project.org Propel, http://propelorm.orghttp://propelorm.org Eloquent ORM, http://laravel.comhttp://laravel.com Biblioteki ORM dla PHP

47 ksiazki id tytul autor wydawnictwo wydawnictwa id nazwa

48  Konfiguracja  Generowanie mapowania na podstawie istniejącej bazy danych  Generowanie klas encji na podstawie mapowania doctrine.bat orm:convert:mapping --from-database xml config\xml doctrine.bat orm:generate:entities model bootstrap.php, cli-config.php

49 class Wydawnictwo { private $id; private $nazwa; public function getId() { return $this->id; } public function getNazwa() { return $this->nazwa; } public function setNazwa($nazwa) { $this->nazwa = $nazwa; return $this; } class Wydawnictwo { private $id; private $nazwa; public function getId() { return $this->id; } public function getNazwa() { return $this->nazwa; } public function setNazwa($nazwa) { $this->nazwa = $nazwa; return $this; }

50 class Ksiazka { private $id; private $tytul; private $autor; private $wydawnictwo; public function getTytul() { return $this->tytul; }... public function getWydawnictwo() { return $this->wydawnictwo; } public function setWydawnictwo(\Wydawnictwo $wydawnictwo = null) { $this->wydawnictwo = $wydawnictwo; return $this; } class Ksiazka { private $id; private $tytul; private $autor; private $wydawnictwo; public function getTytul() { return $this->tytul; }... public function getWydawnictwo() { return $this->wydawnictwo; } public function setWydawnictwo(\Wydawnictwo $wydawnictwo = null) { $this->wydawnictwo = $wydawnictwo; return $this; }

51  Zapytanie w języku DQL $dql = "SELECT b FROM Ksiazka b"; $query = $entityManager->createQuery($dql); $ksiazki = $query->getResult(); foreach ($ksiazki as $k) { $id = $k->getId(); $tytul = $k->getTytul(); $nazwaWydawcy = $k->getWydawnictwo()->getNazwa(); echo "{$id}: {$nazwaWydawcy}; {$tytul}\n"; } $dql = "SELECT b FROM Ksiazka b"; $query = $entityManager->createQuery($dql); $ksiazki = $query->getResult(); foreach ($ksiazki as $k) { $id = $k->getId(); $tytul = $k->getTytul(); $nazwaWydawcy = $k->getWydawnictwo()->getNazwa(); echo "{$id}: {$nazwaWydawcy}; {$tytul}\n"; }

52  Edycja istniejącego obiektu $ksiazka1 = $entityManager->find('Ksiazka', 1); $ksiazka1->setTytul('Zmieniony tytul'); $entityManager->persist($ksiazka1); $entityManager->flush(); $ksiazka1 = $entityManager->find('Ksiazka', 1); $ksiazka1->setTytul('Zmieniony tytul'); $entityManager->persist($ksiazka1); $entityManager->flush();

53  Tworzenie nowego obiektu $nowaKsiazka = new Ksiazka(); $nowaKsiazka->setTytul('Testowy tytul'); $nowaKsiazka->setAutor('Jan Kowalski'); $helion = $entityManager->find('Wydawnictwo', 2); $nowaKsiazka->setWydawnictwo($helion); $entityManager->persist($nowaKsiazka); $entityManager->flush(); $nowaKsiazka = new Ksiazka(); $nowaKsiazka->setTytul('Testowy tytul'); $nowaKsiazka->setAutor('Jan Kowalski'); $helion = $entityManager->find('Wydawnictwo', 2); $nowaKsiazka->setWydawnictwo($helion); $entityManager->persist($nowaKsiazka); $entityManager->flush();


Pobierz ppt "Piotr Czapiewski Wydział Informatyki ZUT Wykład 2."

Podobne prezentacje


Reklamy Google