SlideShare a Scribd company logo
1 of 19
Download to read offline
PHP Object Oriented
  Programming
Concepts, Patterns, Examples
UVOD – Ukratko o OOP
•Feksibilnost, brzina kodiranja, brzina rada aplikacije,
organizacija koda za buduce izmene I dorade.
•Ne moze se zamisliti velika I kompleksna aplikacija bez
OOP pristupa izrade.
•Laksa vizualizacija citave aplikacijeclass Automobil {
 public $marka;
 public $cena;
 public function vozi($gde){
   return ‘Auto ’.$this->$marka.’ koji je cene ’.$this->$cena.’ RSD vozim ’.$gde;
 }
}
//upotreba $auto = new Automobil;
$auto->marka = ‘Trabant’;
$auto->cena = ‘100’;
$auto->vozi(‘na otpad’);
//odgovor: Auto Trabant koji je cene 100RSD vozim na otpad
Koncepti OOP
•Klasa
•Konstruktor
•Konstanta klase
•Nasledjena klasa
•Mutacije
•Autoloaderi
•Staticne varijable I metode
•Polimorfizam
Klasa
•Templejt, okvir jednog objekta
Npr.: Voce je klasa, dok su limuni, jabuke
objekti klase Voce.
•class Website {
    public function add_website($params = array()){
      //checking and inserting into db
    }
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Konstruktor
•Poziva se prilikom kreiranja objekta klase
•Moze se iskoristiti za skladistenje globalnih
vrednosti za klasu
•class Website {
  function __construct(){
     print ‘Dodjoh u klasu’;
  }
  public function add_website($params = array()){
    //checking and inserting into db
  }
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat: Dodjoh u klasu
Konstanta klase
•Vrednosti koje mozemo da koristimo bilo
gde unutar klase
•class Website {
  const verzija = ‘3.2’;
  function __construct(){
     print ‘Dodjoh u klasu’;
  }
  public function add_website($params = array()){
     echo ‘<br />Website mora biti u verziji ’.self::verzija.’ +’;
    //checking and inserting into db
  }
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat: Dodjoh u klasu
Website mora biti u verziji 3.2 +
Nasledjena klasa
Dobija se vise fleksibilnosti u programiranju
S druge strane ne treba ih koristiti kad
imamo samo razlicite vrednosti izmedju
klasa, treba da ih koristimo samo kad je
struktura I ponasanje klasa drugacije. Treba
preferirati objektnu kompoziciju, naspram
nasledjivanja klasa.
Mutacije
•Koristi se za promeni vrednosti privatnih
metoda iz public funkcije
•class Website {
  private $verzija;
  public function change_version($arg){
    $this->verzija = $arg;
  }
  public function add_website($params = array()){
     echo ‘<br />Website mora biti u verziji ’.$this->verzija.’ +’;
    //checking and inserting into db
  }
}
Website::change_version(‘3.2.5’);
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat:
Website mora biti u verziji 3.2.5
Autoloaderi
Olaksava posao inkludovanja fajlova
Jednim funkcija moze da hendluje sve
includes
function _autoload($classname){
  require_once($classname.’.php’);
}
$classname = ‘lib/mailchimp.api.class’;
$mailhimp = new $classname();
Staticne varijable I metode
Staticne varijable I metode se koriste kada
imamo neki sadrzaj ili metodu koju hocemo
kao takvu da delimo medju svim objektima
klase
Ukoliko imamo staticne metode onda joj
pristupamo preko klase, a ne preko objekta:
Website::add_website($siteinfo);
Polimorfizam
•Nacin koji omogucava klasama da imaju
razlicitu funkcionalnost dok dele slicni
interfejs.interface MyInterface {
 public function doThis();
 public function doThat();
 public function setName($name);
}
class MyClass implements MyInterface {
  protected $name;
  public function doThis() {
    // code that does this
  }
  public function doThat() {
    // code that does that
  }
  public function setName($name) {
    $this->name = $name;
  }
}
Paterni
•Templejti koji nam olaksavaju resenje
problema
•Ima 23 paterna trenutno, I kategorisani su
na “Creation” paterne, “Structural”, I
“Behavioral” paterne.
•5 najcesce koriscenih: “Factory Method”,
“Singleton Method”, “Observer Method”,
“The chain-of-command pattern”, “The
strategy pattern”
Factory Method
•Dobrodosao je u velikim sistemima, kada
jedna izmena koda moze da poremeti citav
dalji niz aplikacije.
•Ukoliko treba da se izmeni tip objekta u
glavnoj klasi, treba samo da se promeni
factory klasa, I onda ce sve ostale klase da
koristi novi objekat preko factory klase,
automatski.
•interface IUser {
  function getName();
}

class User implements IUser {
  public function __construct( $id ) { }
  public function getName() { return "Zeljko"; }
}

class UserFactory {
  public static function Create( $id ) {
    return new User( $id );
  }
}
$uo = UserFactory::Create( 1 );
echo( $uo->getName()."n" ); //response: Zeljko
Singleton Method
•Sluzi da jednu klasu instancira samo
jednom, ako je potrebno, kako se ne bi
gubilo vreme.
Observer Method
•Jos jedan nacin sprecavanja kolapsa priliko
izmene koda.
•Dobijamo metodu koja dozvoljava drugim
objektima, posmatracima, da se registruju.
Kada se posmatrani objekat promeni,
posalje poruku svim registrovanim
posmatracima, pa oni dalje mogu da rade
sta hoce s tim podacima.
•interface IObserver {
  function onChanged( $sender, $args );
}
interface IObservable {
  function addObserver( $observer );
}
class UserList implements IObservable {
  private $_observers = array();
  public function addCustomer( $name ) {
    foreach( $this->_observers as $obs )
     $obs->onChanged( $this, $name );
  }
  public function addObserver( $observer ) {
  $this->_observers []= $observer;
  }
}
class UserListLogger implements IObserver {
  public function onChanged( $sender, $args ) {
    echo( "'$args' added to user listn" );
  }
}
$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "Zeljko" );
The chain-of-command pattern
•Omogucava da se lancano pozovu komande, posalju poruke, zahtevi ili sta god.
•interface ICommand {
  function onCommand( $name, $args );
}
class CommandChain {
  private $_commands = array();
  public function addCommand( $cmd ) {
    $this->_commands []= $cmd;
  }
  public function runCommand( $name, $args ) {
    foreach( $this->_commands as $cmd ) {
      if ( $cmd->onCommand( $name, $args ) ) return;
    }
  }
}
class UserCommand implements ICommand {
  public function onCommand( $name, $args ) {
    if ( $name != 'addUser' ) return false;
    echo( "UserCommand handling 'addUser'n" ); return true;
    }
}
class MailCommand implements ICommand {
  public function onCommand( $name, $args ) {
    if ( $name != 'mail' ) return false;
    echo( "MailCommand handling 'mail'n" ); return true;
    }
}
$cc = new CommandChain();
$cc->addCommand( new UserCommand() );
$cc->addCommand( new MailCommand() );
$cc->runCommand( 'addUser', null );
$cc->runCommand( 'mail', null );
The strategy pattern
•Omogucava da se uzme deo
funkcionalnosti iz komplekse klase, kako bi
mogli lakse da se menjaju, bez uticaja na
ostatak koda.

More Related Content

What's hot

Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)dynamis
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasJavier Eguiluz
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5Javier Eguiluz
 
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Ontico
 
Meteor로 만드는 modern web application
Meteor로 만드는 modern web applicationMeteor로 만드는 modern web application
Meteor로 만드는 modern web applicationJaeho Lee
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаяsheplyakov
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
 
RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기Yongha Yoo
 
Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decoratorsJosipKatalinic
 
from new class and dependency injection to PSR-11 and Auto-wiring
from new class and dependency injection to PSR-11 and Auto-wiringfrom new class and dependency injection to PSR-11 and Auto-wiring
from new class and dependency injection to PSR-11 and Auto-wiringMilad Arabi
 
アプリ設定の保存をシンプルに
アプリ設定の保存をシンプルにアプリ設定の保存をシンプルに
アプリ設定の保存をシンプルにsusan335
 
modern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquerymodern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jqueryAdam Zygadlewicz
 
Aller plus loin avec Doctrine2
Aller plus loin avec Doctrine2Aller plus loin avec Doctrine2
Aller plus loin avec Doctrine2André Tapia
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0zfconfua
 

What's hot (20)

Java script.trend(spec)
Java script.trend(spec)Java script.trend(spec)
Java script.trend(spec)
 
jQuery PLUGIN
jQuery PLUGINjQuery PLUGIN
jQuery PLUGIN
 
Proxy & CGLIB
Proxy & CGLIBProxy & CGLIB
Proxy & CGLIB
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
 
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
 
Meteor로 만드는 modern web application
Meteor로 만드는 modern web applicationMeteor로 만드는 modern web application
Meteor로 만드는 modern web application
 
Testování prakticky
Testování praktickyTestování prakticky
Testování prakticky
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
лабораторная работа 1 Исправленная
лабораторная работа 1 Исправленнаялабораторная работа 1 Исправленная
лабораторная работа 1 Исправленная
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
 
Wek14 mysql 2
Wek14 mysql 2Wek14 mysql 2
Wek14 mysql 2
 
RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기
 
Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decorators
 
from new class and dependency injection to PSR-11 and Auto-wiring
from new class and dependency injection to PSR-11 and Auto-wiringfrom new class and dependency injection to PSR-11 and Auto-wiring
from new class and dependency injection to PSR-11 and Auto-wiring
 
アプリ設定の保存をシンプルに
アプリ設定の保存をシンプルにアプリ設定の保存をシンプルに
アプリ設定の保存をシンプルに
 
modern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquerymodern javascript, unobtrusive javascript, jquery
modern javascript, unobtrusive javascript, jquery
 
Aller plus loin avec Doctrine2
Aller plus loin avec Doctrine2Aller plus loin avec Doctrine2
Aller plus loin avec Doctrine2
 
Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0Юнит тестирование в Zend Framework 2.0
Юнит тестирование в Zend Framework 2.0
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 

Oop koncepti

  • 1. PHP Object Oriented Programming Concepts, Patterns, Examples
  • 2. UVOD – Ukratko o OOP •Feksibilnost, brzina kodiranja, brzina rada aplikacije, organizacija koda za buduce izmene I dorade. •Ne moze se zamisliti velika I kompleksna aplikacija bez OOP pristupa izrade. •Laksa vizualizacija citave aplikacijeclass Automobil { public $marka; public $cena; public function vozi($gde){ return ‘Auto ’.$this->$marka.’ koji je cene ’.$this->$cena.’ RSD vozim ’.$gde; } } //upotreba $auto = new Automobil; $auto->marka = ‘Trabant’; $auto->cena = ‘100’; $auto->vozi(‘na otpad’); //odgovor: Auto Trabant koji je cene 100RSD vozim na otpad
  • 3. Koncepti OOP •Klasa •Konstruktor •Konstanta klase •Nasledjena klasa •Mutacije •Autoloaderi •Staticne varijable I metode •Polimorfizam
  • 4. Klasa •Templejt, okvir jednog objekta Npr.: Voce je klasa, dok su limuni, jabuke objekti klase Voce. •class Website { public function add_website($params = array()){ //checking and inserting into db } } Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
  • 5. Konstruktor •Poziva se prilikom kreiranja objekta klase •Moze se iskoristiti za skladistenje globalnih vrednosti za klasu •class Website { function __construct(){ print ‘Dodjoh u klasu’; } public function add_website($params = array()){ //checking and inserting into db } } Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’)); Rezultat: Dodjoh u klasu
  • 6. Konstanta klase •Vrednosti koje mozemo da koristimo bilo gde unutar klase •class Website { const verzija = ‘3.2’; function __construct(){ print ‘Dodjoh u klasu’; } public function add_website($params = array()){ echo ‘<br />Website mora biti u verziji ’.self::verzija.’ +’; //checking and inserting into db } } Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’)); Rezultat: Dodjoh u klasu Website mora biti u verziji 3.2 +
  • 7. Nasledjena klasa Dobija se vise fleksibilnosti u programiranju S druge strane ne treba ih koristiti kad imamo samo razlicite vrednosti izmedju klasa, treba da ih koristimo samo kad je struktura I ponasanje klasa drugacije. Treba preferirati objektnu kompoziciju, naspram nasledjivanja klasa.
  • 8. Mutacije •Koristi se za promeni vrednosti privatnih metoda iz public funkcije •class Website { private $verzija; public function change_version($arg){ $this->verzija = $arg; } public function add_website($params = array()){ echo ‘<br />Website mora biti u verziji ’.$this->verzija.’ +’; //checking and inserting into db } } Website::change_version(‘3.2.5’); Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’)); Rezultat: Website mora biti u verziji 3.2.5
  • 9. Autoloaderi Olaksava posao inkludovanja fajlova Jednim funkcija moze da hendluje sve includes function _autoload($classname){ require_once($classname.’.php’); } $classname = ‘lib/mailchimp.api.class’; $mailhimp = new $classname();
  • 10. Staticne varijable I metode Staticne varijable I metode se koriste kada imamo neki sadrzaj ili metodu koju hocemo kao takvu da delimo medju svim objektima klase Ukoliko imamo staticne metode onda joj pristupamo preko klase, a ne preko objekta: Website::add_website($siteinfo);
  • 11. Polimorfizam •Nacin koji omogucava klasama da imaju razlicitu funkcionalnost dok dele slicni interfejs.interface MyInterface { public function doThis(); public function doThat(); public function setName($name); } class MyClass implements MyInterface { protected $name; public function doThis() { // code that does this } public function doThat() { // code that does that } public function setName($name) { $this->name = $name; } }
  • 12. Paterni •Templejti koji nam olaksavaju resenje problema •Ima 23 paterna trenutno, I kategorisani su na “Creation” paterne, “Structural”, I “Behavioral” paterne. •5 najcesce koriscenih: “Factory Method”, “Singleton Method”, “Observer Method”, “The chain-of-command pattern”, “The strategy pattern”
  • 13. Factory Method •Dobrodosao je u velikim sistemima, kada jedna izmena koda moze da poremeti citav dalji niz aplikacije. •Ukoliko treba da se izmeni tip objekta u glavnoj klasi, treba samo da se promeni factory klasa, I onda ce sve ostale klase da koristi novi objekat preko factory klase, automatski.
  • 14. •interface IUser { function getName(); } class User implements IUser { public function __construct( $id ) { } public function getName() { return "Zeljko"; } } class UserFactory { public static function Create( $id ) { return new User( $id ); } } $uo = UserFactory::Create( 1 ); echo( $uo->getName()."n" ); //response: Zeljko
  • 15. Singleton Method •Sluzi da jednu klasu instancira samo jednom, ako je potrebno, kako se ne bi gubilo vreme.
  • 16. Observer Method •Jos jedan nacin sprecavanja kolapsa priliko izmene koda. •Dobijamo metodu koja dozvoljava drugim objektima, posmatracima, da se registruju. Kada se posmatrani objekat promeni, posalje poruku svim registrovanim posmatracima, pa oni dalje mogu da rade sta hoce s tim podacima.
  • 17. •interface IObserver { function onChanged( $sender, $args ); } interface IObservable { function addObserver( $observer ); } class UserList implements IObservable { private $_observers = array(); public function addCustomer( $name ) { foreach( $this->_observers as $obs ) $obs->onChanged( $this, $name ); } public function addObserver( $observer ) { $this->_observers []= $observer; } } class UserListLogger implements IObserver { public function onChanged( $sender, $args ) { echo( "'$args' added to user listn" ); } } $ul = new UserList(); $ul->addObserver( new UserListLogger() ); $ul->addCustomer( "Zeljko" );
  • 18. The chain-of-command pattern •Omogucava da se lancano pozovu komande, posalju poruke, zahtevi ili sta god. •interface ICommand { function onCommand( $name, $args ); } class CommandChain { private $_commands = array(); public function addCommand( $cmd ) { $this->_commands []= $cmd; } public function runCommand( $name, $args ) { foreach( $this->_commands as $cmd ) { if ( $cmd->onCommand( $name, $args ) ) return; } } } class UserCommand implements ICommand { public function onCommand( $name, $args ) { if ( $name != 'addUser' ) return false; echo( "UserCommand handling 'addUser'n" ); return true; } } class MailCommand implements ICommand { public function onCommand( $name, $args ) { if ( $name != 'mail' ) return false; echo( "MailCommand handling 'mail'n" ); return true; } } $cc = new CommandChain(); $cc->addCommand( new UserCommand() ); $cc->addCommand( new MailCommand() ); $cc->runCommand( 'addUser', null ); $cc->runCommand( 'mail', null );
  • 19. The strategy pattern •Omogucava da se uzme deo funkcionalnosti iz komplekse klase, kako bi mogli lakse da se menjaju, bez uticaja na ostatak koda.