50
I.Wojnicki, PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie 25 kwietnia 2020 Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 1 / 50

PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

  • Upload
    others

  • View
    68

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHPPHP – PHP Hypertext Preprocessor

Igor Wojnicki

Katedra Informatyki StosowanejAkademia Górniczo-Hutnicza w Krakowie

25 kwietnia 2020

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 1 / 50

Page 2: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

Spis Tresci I

1 PHPDostep do zewnetrznych zasobówObiektyWyjatkiPDO

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 2 / 50

Page 3: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Spis Tresci

1 PHPDostep do zewnetrznych zasobówObiektyWyjatkiPDO

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 3 / 50

Page 4: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Jak sie dostac do czegos w Internecie

Odczytac jak zwykły plik: HTTP wrapper (domyslnie GET).Uzyc buiblioteki cURL.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 4 / 50

Page 5: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Odczyt zasobów, fopen()

$h=fopen('http://www.google.com', 'r');if ($h) {

while (($bufor=fgets($h))!=false) {echo $bufor;

}fclose($h);

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 5 / 50

Page 6: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Odczyt zasobów, file() i inniZałozenie: pod adresemhttp://home.agh.edu.pl/~wojnicki/temp.php znajduje sieponizszy kod:<?php$komunikat="temperatura\n21";echo $komunikat;

?>

Przykładowe przetwarzanie liniami:<?php$f=file('http://home.agh.edu.pl/~wojnicki/temp.php');if ($f) {foreach ($f as $line_num => $line) {echo "Linia #<b>{$line_num}</b> : " .

htmlspecialchars($line) . "<br />\n";}

}?>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 6 / 50

Page 7: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Odczyt zasobów, file_get_contents()

Podobnie jak file(), ale zwraca łancuch znaków.

echo file_get_contents('http://home.agh.edu.pl/~wojnicki/temp.php');

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 7 / 50

Page 8: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Przykład przetwarzania danych JSON

Przetwarzanie listy.

$dbs=file_get_contents('http://awing.kis.agh.edu.pl:5984/_all_dbs');

if ($dbs) {$dbs_tab=json_decode($dbs,true);foreach ($dbs_tab as $nazwa) {echo $nazwa . '<br/>';

}}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 8 / 50

Page 9: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Odczyt zasobów, cURL, GET

$c=curl_init('http://awing.kis.agh.edu.pl:5984');/* zwroc dane jako wartosc, a nie stdout */curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);$dane=curl_exec($c);if ($dane) {

curl_close($c);echo $dane;

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 9 / 50

Page 10: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Odczyt zasobów, cURL, POST

$dok='{"tresc":"zawartosc dokumentu","autor":"Wojnicki"}';

$c=curl_init('http://awing.kis.agh.edu.pl:5984/moja1');curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);curl_setopt($c, CURLOPT_POST, 1);curl_setopt($c, CURLOPT_HTTPHEADER,array('Content-type: application/json'));

curl_setopt($c, CURLOPT_POSTFIELDS, $dok);$dane=curl_exec($c);

if ($dane) {curl_close($c);echo $dane;

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 10 / 50

Page 11: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 11 / 50

Page 12: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB I

function checked($source,$value) {if ($source === $value) echo 'checked="checked"';

}

$uri=$_POST['uri'];if ($_POST['method'] === 'GET' ||

$_POST['method'] === 'POST' ||$_POST['method'] === 'PUT' ||$_POST['method'] === 'DELETE' )$method=$_POST['method'];

$content_type='Content-type: '.$_POST['content'];$post=$_POST['post'];?></header><body>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 12 / 50

Page 13: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB II

<h1>Input</h1><p><form method="POST">URI:<br/><textarea rows="4" cols="60" name="uri">

<?php echo $uri;?></textarea><br/>Method: <input type="radio" name="method"value="GET" <?php checked($method,'GET')?>/> GET

<input type="radio" name="method"value="POST" <?php checked($method,'POST')?>/> POST

<input type="radio" name="method"value="PUT" <?php checked($method,'PUT')?>/> PUT

<input type="radio" name="method"value="DELETE" <?php checked($method,'DELETE')?>/>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 13 / 50

Page 14: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB III

DELETE<br/>Content type: <input type="text"name="content" size="40" value="application/json"/>

<br/>POST/PUT:<br/><textarea rows="4" cols="60" name="post"><?php echo stripslashes($post);?></textarea>

<br/><input type="submit"/><input type="reset"/>

</form></p><h1>Output</h1><h2>JSON</h2><p>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 14 / 50

Page 15: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB IV

<?phpif (isset($uri)){$c=curl_init($uri);curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);curl_setopt($c,CURLOPT_CUSTOMREQUEST,$method);if ($method === 'POST' || $method === 'PUT') {

curl_setopt($c, CURLOPT_POSTFIELDS,stripslashes($post));

curl_setopt($c, CURLOPT_HTTPHEADER,array($content_type));

}$data=curl_exec($c);if ($data) {curl_close($c);

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 15 / 50

Page 16: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB V

echo $data;

?>

<h2>Decoded JSON</h2><pre><?php

// true - konwersja na tablice a nie obiektprint_r(json_decode($data,true));

}?></pre><?php}?>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 16 / 50

Page 17: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Dostep do zewnetrznych zasobów

Powłoka dla CouchDB VI

</p>

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 17 / 50

Page 18: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Spis Tresci

1 PHPDostep do zewnetrznych zasobówObiektyWyjatkiPDO

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 18 / 50

Page 19: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Podejscie obiektowe

Wprowadzone w wersji PHP4 (małowydajne)Poprawione w wersji PHP5.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 19 / 50

Page 20: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Klasa

Kolekcja własnosci:metod,zmiennych,stałych.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 20 / 50

Page 21: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Definicja klasy

<?phpclass Samochod{

public $marka;public $rok_produkcji;

public function Opis(){

return $this->marka . ' z ' .$this->rok_produkcji . ' roku';

}}?>

$this – aktualny obiekt.-> – odwołanie do składowej klasy.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 21 / 50

Page 22: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Tworzenie obiektów

Operator new

$samochod = new Samochod();$samochod->marka = 'Syrena';$samochod->rok_produkcji = 1979;echo $samochod->Opis();

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 22 / 50

Page 23: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Konstruktor

Funkcje magiczne (magic): __nazwaFunkcji()

class Samochod{

public $marka = 'brak danych';public function __construct($nazwa){

$this->marka=$nazwa;}

}

Jaki bedzie rezultat działania ponizszego programu?

$s1 = new Samochod('Polonez');echo $s1->marka;

$s2 = new Samochod();echo $s2->marka;

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 23 / 50

Page 24: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Konstruktor, ulepszenie: wartosci domyslne

class Samochod{

public $marka = 'brak danych';public function __construct($nazwa=null){

if (isset($nazwa)) $this->marka=$nazwa;}

}

Jaki bedzie rezultat działania ponizszego programu?

$s1 = new Samochod('Polonez');echo $s1->marka;

$s2 = new Samochod();echo $s2->marka;

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 24 / 50

Page 25: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Konstruktor

Uwaga na dzedziczenie:Jezeli klasa podrzedna definiuje swój konstruktor, konstruktorklasy nadrzednej nie jest domyslnie wywoływany,Nalezy uzyc: parent::__construct()

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 25 / 50

Page 26: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Destruktor

class Samochod{...

public function __destruct(){

...}

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 26 / 50

Page 27: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Widocznosc własnosci (składniki klas)

Private tylko dostepne z wewnatrz klasy.Protected dostepne z wewnatrz klasy i klas potomnych.

Public dostepne z wewnatrz i zewnatrz.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 27 / 50

Page 28: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Samochod, raz jeszcze

Getters, setters.

class Samochod {private $marka;private $rok_produkcji;public function Opis() {

return $this->marka . ' z ' .$this->rok_produkcji . ' roku';

}public getMarka() { return $this->marka; }public setMarka($m) { $this->marka=$m; }public getRok() { return $this->rok; }public setRok($r) {

if ($r>1900) $this->rok_produkcji=$relse $this->rok_produkcji=1900;

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 28 / 50

Page 29: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Dziedziczenie

Klasa nadrzedna musi byc zdefiniowana przed klasa podrzedna.Uwaga: w tym przykładzie brak getters, setters.

class Zwierze {protected $imie;public function Powitanie() {return 'Jestem zwierzakiem, mam na imie: ' .

$this->imie;}

}

class Pies extends Zwierze {public function Powitanie() {return 'Jestem psem, mam na imie: ' .$this->imie;

}}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 29 / 50

Page 30: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Dziedziczenie, przykład

$zwierz=new $Zwierze();echo $zwierz->Powitanie();

$pies=new $Pies();echo $pies->Powitanie();

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 30 / 50

Page 31: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Klasy abstrakcyjne

Nie mozna tworzyc obiektów.Metody równiez moga byc abstrakcyjne.Tylko abstrakcyjna klasa moze posiadac abstrakcyjne metody.

abstract class Zwierze {protected $imie;protected $wiek;public function Opis(){

return $this->imie . ', wiek: ' . $this->wiek;}abstract public function Powitanie();

}

Uwaga: w przykładzie brak getters, setters.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 31 / 50

Page 32: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Dziedziczenie i klasy abstrakcyjne

class Pies extends Zwierze{

public function Powitanie(){

return 'Hau, hau!';}public function Opis(){

return parent::Opis() . ', jestem psem.';}

}

Metody abstrakcyjne musza byc zdefiniowane, aby móc tworzycobiekty.parent:: – odwołanie do klasy nadrzednej.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 32 / 50

Page 33: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Stałe

class Osoba{

const DomyslneNazwisko = 'Nowak';...

}

echo 'Domyslne nazwisko: ' . Osoba::DomyslneNazwisko;

Stałe sa zawsze dostepne publicznie.Przy odwołaniu nie uzywa sie $

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 33 / 50

Page 34: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Własnosci statyczne I

Własnosci

Metody

Słowo klucznowe static

Nie moga odwoływac sie do własnosci niestatycznych.

Istnieje tylko jedna kopia, dzielona przez wszystkie obiekty.

Moga byc uzyte bez koniecznosci tworzenia obiektów.

self:: – odwołanie do klasy biezacej.

NazwaKlasy:: – odwołanie do konkretnej klasy.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 34 / 50

Page 35: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Własnosci statyczne II

class Mechanika {public const g=9.81;public static function v($v0,$a,$t) {

return $v0+$a*$t;}public static function vUpadku($t) {

return self::v(0,self::g,$t);}

}

echo 'predkosc po 3 sekundach: '.Mechanika::vUpadku(3);

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 35 / 50

Page 36: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Klasa ostateczna

Zadna klasa nie moze po niej dziedziczyc.

final class SamochodMaly extendsSamochodKompakt

{...

}

final mozna zastosowac do metod, nie pozwalajac na ichreimplementacje w podklasach.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 36 / 50

Page 37: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Interfejsy

Czyste klasy abstrakcyjne.Nic nie implementuja.

interface Wzorzec {public function ustaw($nazwa, $wartosc);public function pobierz($format);

}class MaszynaDrukarska implements Wzorzec {

private $dane = array();public function ustaw($nazwa, $wartosc) {

$this->dane[$nazwa] = $wartosc;}public function pobierz($format) {

...}

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 37 / 50

Page 38: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Klonowanie I

Obiekty przekazywane sa poprzez referencje (uwaga: tablice nie!).

Tworzenie kopii obiektów:

$kopia_obiektu = clone $obiekt;

Tylko płytka kopia.

Mozna zdefiniowac konstruktor kopiujacy: __clone()

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 38 / 50

Page 39: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Klonowanie II

class Pojazdy {private $mojSamochod;public function __construct($s) {$this->mojSamochod = new Samochod($s);

}public function __clone() {$this->mojSamochod = clone $this->mojSamochod;

}}

$moje=new Pojazdy('Syrena');$sasiada=clone $moje;

Sasiad ma takie same pojazdy jak ja, ale nie te same!

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 39 / 50

Page 40: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Obiekty

Serializacja

serialize()

unserialize()

$a = new A;$s = serialize($a);// przechowaj $s w plikufile_put_contents('plik_z_obiektem_a', $s);

// w innym skrypcie:include('klasaA.php'); /* def. klasy A */

$s = file_get_contents('plik_z_obiektem_a');$a = unserialize($s);

Przykład z: http://www.php.net

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 40 / 50

Page 41: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Wyjatki

Spis Tresci

1 PHPDostep do zewnetrznych zasobówObiektyWyjatkiPDO

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 41 / 50

Page 42: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Wyjatki

Obsługa wyjatków

try, catch, throw

klasa Excepttion

http://www.php.net/manual/en/language.exceptions.php

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 42 / 50

Page 43: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Wyjatki

Wyjatki, przykład

function inverse($x) {if (!$x) {

throw new Exception('Division by zero.');}else return 1/$x;

}

try {echo inverse(5) . "\n";echo inverse(0) . "\n";

} catch (Exception $e) {echo 'Caught exception: ', $e->getMessage(),"\n";

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 43 / 50

Page 44: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP Wyjatki

Wyjatki, rezultat

0.2Caught exception: Division by zero.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 44 / 50

Page 45: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

Spis Tresci

1 PHPDostep do zewnetrznych zasobówObiektyWyjatkiPDO

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 45 / 50

Page 46: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

PDO: PHP Data Objects

Warstwa abstrakcji dostepu do danych.Nie jest to abstrakcja bazy danych.Wykorzystuje podejscie obiektowe.

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 46 / 50

Page 47: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

Przykład, baza danych w pamieci

Błedy z danymi połaczenia – nalezy przechwycic wyjatek.

try {$dbh = new PDO('sqlite::memory:', null, null);$dbh->query('CREATE TABLE FOO (a INTEGER)');$dbh->query('INSERT INTO FOO VALUES (1)');$dbh->query('INSERT INTO FOO VALUES (5)');foreach($dbh->query('SELECT * from FOO') as $row) {print_r($row);

}$dbh = null;

} catch (PDOException $e) {echo 'Error!: ' . $e->getMessage() . '<br/>';die();

}

Wyjscie: Array ( [a] => 1 [0] => 1 ) Array ( [a] => 5 [0] => 5 )

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 47 / 50

Page 48: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

Przykład

try {$dbh = new PDO('sqlite:/home/wojnicki/mojabaza.sql3',

null, null);$dbh->query('CREATE TABLE FOO (a INTEGER)');print_r($dbh->errorCode());print_r($dbh->errorInfo());$dbh->query('INSERT INTO FOO VALUES (1)');$dbh->query('INSERT INTO FOO VALUES (5)');foreach($dbh->query('SELECT * from FOO') as $row) {print_r($row);

}$dbh = null;

} catch (PDOException $e) {echo 'Error!: ' . $e->getMessage() . '<br/>';die();

}

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 48 / 50

Page 49: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

Rezultat

Za pierwszym razem:

00000Array ( [0] => 00000 )Array ( [a] => 1 [0] => 1 )Array ( [a] => 5 [0] => 5 )

Za drugim razem:

HY000Array ( [0] => HY000 [1] => 1

[2] => table FOO already exists )Array ( [a] => 1 [0] => 1 )Array ( [a] => 5 [0] => 5 )Array ( [a] => 1 [0] => 1 )Array ( [a] => 5 [0] => 5 )

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 49 / 50

Page 50: PHP PHP Hypertext Preprocessorhome.agh.edu.pl/~wojnicki/wiki/_media/pl:paw:dphp3.pdf · PHP PHP – PHP Hypertext Preprocessor Igor Wojnicki Katedra Informatyki Stosowanej Akademia

I.Wojnick

i, PHP

PHP PDO

Klasa PDO

__construct ( string $dsn [, string $username [, string $password [,array $driver_options ]]] )

bool beginTransaction ( void )bool commit ( void )mixed errorCode ( void )array errorInfo ( void )int exec ( string $statement )mixed getAttribute ( int $attribute )array getAvailableDrivers ( void )bool inTransaction ( void )string lastInsertId ([ string $name = NULL ] )PDOStatement prepare ( string $statement [,

array $driver_options = array() ] )PDOStatement query ( string $statement )string quote ( string $string [, int $parameter_type = PDO::PARAM_STR ] )bool rollBack ( void )bool setAttribute ( int $attribute , mixed $value )

Igor Wojnicki (AGH, KIS) PHP 25 kwietnia 2020 50 / 50