PHP Day at UNICEF Lab of Kosova

40
PHP DAY @ Unicef Lab of Kosovo

description

 

Transcript of PHP Day at UNICEF Lab of Kosova

Page 1: PHP Day at UNICEF Lab of Kosova

PHP DAY@ Unicef Lab of Kosovo

Page 2: PHP Day at UNICEF Lab of Kosova

Flamur MavrajCreative designer and web developer

@oxodesign

Page 3: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

1. Cka eshte PHP?

• PHP (Hypertext Preprocessor)• PHP është gjuhë skriptueste qe egzekutohet ne

server.• PHP përkrahë shumë baza të të dhënave (MySQL,

PostgreSQL, Informix, Oracle, Sybase...)• PHP është një softuer me burim të hapur• PHP është falas për shkarkim dhe për përdorim

Page 4: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

1. Pse PHP?

• PHP përkrahë shumë platforma (Win, Linux, Unix,...)• PHP punon me shumicën e serverëve (Apache, IIS,...)• PHP është falas• PHP është lehtë për tu mësuar dhe ka komunitet te

gjere

Page 5: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

Sintaksat

<?php ?> <html><body><?phpecho "Pershendetje";?></body></html>

Page 6: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

Variablat

<?php $var = “Kjo eshte nje variable”;?>

<?php$123var = “Kjo nuk eshte valide”?>

Variablat përdorën për ruajtjën e vlerave, si tekst, numrat dhe gjerat tjera.Kur një variabël caktohet atëherë ajo mund të përdoret shumë herë në atë skript.Të gjitha variablat në PHP fillojnë me simbolin $ (dollarit).

Page 7: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

Operatoret

<?php $nr = 2;$nr = $nr + 2; // $nr += 2;echo $nr;?>

<?php$nr1 = “2”Var_dump($nr == $nr1); // truevar_dump($nr === $nr1); // false?>

Operatoret matmatikor (+ - * /), lidhes ( , . ) dhe identifikues ( ! == === && || )

Page 8: PHP Day at UNICEF Lab of Kosova

Gjerat bazike

Operatoret

<?php Class Test {}

Class TestInstanceOf extends Test{}

?>

<?php$test1 = new Test();$test2 = new TestInstanceOf();

Var_dump($test1 instanceof Test); // truevar_dump($test2 instanceof Test); // true?>

Page 9: PHP Day at UNICEF Lab of Kosova

OOP

Çka është OOP?Programim i orientuar ne objekte te mundëson kodimin ne një meny me te lehtë dhe praktike, gjithashtu te lehtëson mirëmbajte kodit. Kjo teknik programimi na mundëson ndarjen e kodimit ne pjesë te ndryshme te funksioneve, që na lehtëson lexushëmërin dhe kuptueshmërinë, njëherit na mundëson re-përdorimin ne programe tjera dhe hap mundësin për përdorje te projektimit te modeleve (design patterns)!

Shumë ngatërrojnë definimin mbes një objekti dhe klasës (class)! Një klasë është një recetë qe përshkruan se çka një objekt është, ka dhe bën. Kurse objekti është vetë instanca e asaj klase.

Page 10: PHP Day at UNICEF Lab of Kosova

OOP

Pse OOP?

1. Lexueshmeri dhe kuptueshmëri te kodit2. Mirembajtje me te leht.3. Re-perdorimin e kodi.4. Implementimi dhe interfaces5. Zherimi (Extensibility)

Page 11: PHP Day at UNICEF Lab of Kosova

OOP

Shembull baze<?php/*** Kjo është klasa*/class Empirio_Customer{

protected $_name;

public function getName(){return $this-

>_name;}

}

<?php/*** Kurse një objekt është vete

instanca e asaj "klase (class)"*/

$object = new Empirio_Object();

Page 12: PHP Day at UNICEF Lab of Kosova

OOP

Dukurit (metodat) e nje klase (class)

1. Public• Metodat publike te një klase mund te lexohet (përdorën) nga kudo, si

nga vetë klasa gjithashtu dhe nga vetë objekti.

2. Protected• Është gati njësoj sikur metoda private por ka dallim pasi qe kjo

metodë mundëson ta përdorësh dhe nga implementimet dhe zgjerimet (extends) te klasave tjera. Por jo direket nga vetë instanca/objekti.

3. Private• Kjo metodë mund te lexohet (përdorët) vetëm brenda vet klasës, e jo

përmes objektit e as nga implementimet apo zgjerimet (extends), para se te përdoresh këtë metodë shiko metodën e mbrojtur ndoshta te përshtatët me mire ne rastin tuaj.

Page 13: PHP Day at UNICEF Lab of Kosova

OOP

Shembull, zgjerimi <?php/*** Kjo është klasa*/class Empirio_Customer{

protected $_name;protected $_discount = 0;

public function getName(){return $this-

>_name;}

}

<?phpClass Empirio_PremiumCustomer extends

Empirio_Customer{protected $_discount = 10;

public funciton setDiscount($discount){$this->_disccount=$discount;

}}

$c = new Empirio_PremiumCustomer();$c->setDiscount(20);

Page 14: PHP Day at UNICEF Lab of Kosova

OOP

Çka është objekt interface?

Objekt interface te lejon te vendosesh rregullat për implementimin e një objekti dhe cilat metoda një objekt duhet ti zbatoj dhe t'u përmbahet! Te gjitha metodat e deklaruara ne një interface duhen te jen publike dhe objekti qe implementon një interface duhet te implementoj te njëjtat metoda përndryshe një gabim fatal do te shfaqet!

<?phpInterface Empirio_Customers{

public function getName(){}

}

<?phpClass Empirio_Customer implement

Empirio_Customers{

public function getName(){return ‘name ...’;

}}

Page 15: PHP Day at UNICEF Lab of Kosova

OOP

Pse te përdorim objekt interface?

Thjesht sepse ti udhëzon te tjerët qe te implementojn metodat e duhura ne modelin e tyre!

Page 16: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Cka eshte model projektimi?

Është një zgjedhje e përgjithshme për një problem te zakonshëm qe ndodh ne projektimin e programeve. Një model nuk është i përkryer por thjesht është një përshkrim i problemit dhe si te zgjedhësh atë, e kur sesi një zgjedhje e gatshme qe ta kopjoni direkt ne kodin tuaj!

Page 17: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Christopher Alexander

Çdo model përshkruan një problem i cili shfaqet shpesh, dhe pastaj përshkruan zgjidhjen për këtë problem, në mënyrë të tillë që ju mund të përdorni këtë zgjidhje një milion herë, pa e bere te njejten dy her.

Page 18: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Subject dhe Observer pattern

Subjekti mban nje list te observers (vezhguesit) dhe njofton ata ateher kur ka ndryshime ne ta.

Page 19: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Factory pattern

Percakton nje interface per krijimin e objekteve.

abstract class Plane{static public function

getInstance($type){return new

$type;}

}

class Boeing extends Plane{}class Airbus extends Plane{}

<?php$a = Plane::getInstance('Boeing');$b = Plane::getInstance('Airbus');

Page 20: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Singelton pattern

Perkufizon thirrjen e nje objekti vetem nje her gjat ekzekutimit.

class Singleton{static protected $instance;static public function getInstance(){if (is_null(self::$instance)){self::$instance = new Self();}return self::$instance;}

}

<?php$singleton = Singleton::getInstance();$singleton->...

Page 21: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

Tjera patterns

1. Registry patterns2. Adapter patterns

Page 22: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

1. Modeli perfaqeson te dhenat2. View shfaq te dhenat e modelit3. Controller, trajton ngjarjet (events) dhe ndryshon

modelin sipas nevojes.

Page 23: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 24: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 25: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 26: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 27: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 28: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Controller

View Model

Page 29: PHP Day at UNICEF Lab of Kosova

Model projektimi (design patterns)

MVC (Model-View-Controller)

Klienti

Serveri

View

Controller

HTTP Request HTTP Response

Model

Page 30: PHP Day at UNICEF Lab of Kosova

1. I bazuar ne komponente2. Implementon MVC3. I thjesht per tu perdorur dhe i orientuar ne objekte4. I testuar mire dhe robust5. Leht per modifikim duke zgjeruar(extending)

komponentet

Zend Framework

Pse zend framework?

Page 31: PHP Day at UNICEF Lab of Kosova

1. Cdo gje konfigurohet2. Cdo gje eshte e bazuar ne plugins (bundles)3. Komponente te gatshme si: DI, Routing, Template,

Console etj...4. Support vetem PHP 5.3 dhe me lart5. Integruar mire me Doctrine 26. Leht per tu testuar me PHPUnit dhe krijuar teste ne

te.

Symfony2

Pse ta zgjedhni Symfony2?

Page 32: PHP Day at UNICEF Lab of Kosova

1. Shkarko Symfony2 nga faqja zyrtare (www.symfony.com)2. Vendos folderat ne vendin qe ti deshiron, tek root ne serverin tend.3. Per ta testuar se a keni shkarkuar verzionin e duhur dhe qe cdo gje

eshte ne rregull shenoni kete komand nga terminali/cmd: php app/console --version dhe shtypni enter, rezultati do del dicka si i ketille: Symfony version 2.0.3 – app/dev/debug

4. Shkruaj komanden: php app/console generate:bundle dhe shtyp enter tek bundle namespace shkruaj nje namespace tenden, ne kete rast une do perdori ‘Empirio’ dhe do krijojm nje blog keshtu qe do e shkruajm keshtu: Empirio/BlogBundle. Mos harroni qe emri duhet gjithemon te perfundoj me nje ‘Bundle’. Opcionet tjera mund ti leni default, keshtu qe vetem shtypni enter.

5. Nqs shikoni ne folder <src> ateher aty sapo u krijua nje folder me emrin e namespaces dhe nen te u krijua nje folder tjeter me emrin BlogBundle

Symfony2

Si te krijojm nje plugin (bundle)?

Page 33: PHP Day at UNICEF Lab of Kosova

1. Prap nga terminali shkruaj komanden php app/console gen:doctrine:entity dhe shtyp enter.

2. Tek opcioni i pare “Entity shourtcut name” e shkruan emrin e namespace qe e krijuam me heret ne kete menyr ‘EmpirioBlogBundle:Post’ dhe shtyp enter, post eshte emri i entities.

3. Shtyp enter ne metoden e preferuar qe defualt eshte ‘annotations’4. Te dhenat e kesaj entity, ne rastin tim do krijoj 3 fields (title, body dhe

published_at), title do te jete nje string, body do jete text dhe published_at do jete datetime format. Krijo keto te dhena dhe shtyp enter per cdo te dhene, kur keni perfunduar shtypni prap enter qe te konfirmoni vazhdimin e me tejshem.

5. Lej default opcionet tjera.

Symfony2

Si te krijojm nje doctrine entity?

Page 34: PHP Day at UNICEF Lab of Kosova

1. Nga terminali shkruaj komanden php app/console doctrine:database:create per te krijuar databazen, emrin dhe te dhanat e databazes mund ta nderroni tek folderi <app/config/paramters.ini>.

2. Tash le ta krijojm tabelen ne baze te entities qe krijuam me heret, kete e bejm duke shkruar kete komand: php app/console doctrine:schema:update --force.

3. Dhe nqs shikoni ne databazen tuaj permes PhpMyAdmin apo programit tuaj qe perdorni per menagjimin e db’s ateher do te mund te shikoni qe eshte krijuar nje databaze e re dhe ne te eshte krujuar nje tabel me emrin “Post”.

Symfony2

Krijimi i db dhe tabelave nga entity?

Page 35: PHP Day at UNICEF Lab of Kosova

1. CRUD eshte shkurtimes per Create, Read, Update dhe Delete, dmth. Jan nje set me funksione per interakcion me databazen. Symfony ka nje komand e cila na mundeson krijimin e ketyre funksioneve nga terminali bazuar ne nje Entity nga doctrine.

2. Kjo bahet duke e shkruar ne terminal kete komand: php app/console doctrine:generate:crud dhe shtypni enter.

3. Shkruani emrin e entities ne rastin tone ‘EmpirioBlogBundle:Post’ dhe shtyp enter

4. Nqs deshironi te krijoni funksionin per Write (Create) ateher ne opcionin e pare mbasi qe keni shkruar emrin sheno ‘y’ dhe tjerat vetem lej default duke i akseptuar me enter.

Symfony2

Si te krijojm CRUD (interakcion) me db?

Page 36: PHP Day at UNICEF Lab of Kosova

Symfony2

Testoni programin

1. Hap shfletuesin dhe shkruaje adresen e serverit tend, nqs e keni serverin ne te njejtin kompjuter ateher shkruaj http://localhost/symfony2/web/app_dev.php/post dhe do e shikoni se si duket.

2. Adresa me lart mvaret krejt nga konfigurimi juaj keshtu qe mund te ndryshoj.

3. Kaq sa i perket Symfony2

Page 37: PHP Day at UNICEF Lab of Kosova

Databazat

Serveri

Një databazë është një koleksion i organizuar të dhënash, qe zakonisht ruhet ne form digjitale! Organizimi i te dhenave ruhet ne menyr relevante me aspektin me realitetin. Gjithesesi termi “databazë” përdoret vetem ateher kur te dhenat kan nje cilesi te duhur. Cilesija mbatet permes, saktesis, disponueshmërisë, përdorshmërisë, dhe elasticitetit.

Page 38: PHP Day at UNICEF Lab of Kosova

Databazat

Llojet e databazave

Serveri

1. Databazat relacionale, si MySQL, Oracle, SQLServer2. Documentbased db’s CouchDB dhe MongoDB3. Graph db’s, Neo4J dhe OrientDB

Page 39: PHP Day at UNICEF Lab of Kosova

Databazat

Documentbased DB

Serveri

1. Struktur semantike (Mendo JSON)2. Verzion i dokumentave3. Map/Reduce queries

Shembull se kur te perdoni kete lloj te db’s eshte nje blog me tags dhe komente, kur cdo post eshte nje dokument dhe nen te ruhen tags si arrays.

Page 40: PHP Day at UNICEF Lab of Kosova

Databazat

Graph DB

Serveri

1. Inspiruar nga teoria per grafe matmatikore G=(V,E)2. Te dhenat strukturohen ne model3. Mundesi dhe lehtesi ne scalability4. Relacione permes kendeve (edges) dhe nyjeve

(nodes)

Shembull se kur te perdoni kete lloj te db’s eshte nje nje medium social si psh. Facebook apo twitter qe nevoitet relacione mes struktures.