[#] Programowanie obiektowe w PHP5

( Ostatnio zmieniony śr., 25/06/2008 - 12:55 )
 

Podstawowa budowa

<?php
  class Osoba {
     private $imie;
     private $data;

     function __construct($imie) {
       $this->imie = $imie;
       $this->data = date("Y-m-d, H:i:s");
     }

    function podajImie() {
      return $this->imie;
    }

    function ustawImie($imie) {
      if (is_string($imie))
         $this->imie = $imie;
      else
         echo "Błędna wartość parametru!";
    }

    function dataUtworzenia() {
        return $this->data;
    }
  }

  $obiekt = new Osoba("Rafał");
  print($obiekt->podajImie());
  print("<br />");
  print($obiekt->dataUtworzenia());

?>

Automatyczne ładowanie klas

<?php
 class Testowa {
   function pisz() {
     print("Klasa Testowa!");
   }
 }
?>


<?php
  function __autoload($nazwa_klasy) {
    require_once("$nazwa_klasy.php");
  }

  $obiekt = new Testowa();
  $obiekt->pisz();
?>

Dziedziczenie

<?php
  class Bazowa {
    public $napis;
    function __construct() {
      $this->napis = "Napis dodany w klasie bazowej";
    }
  }

  class Pochodna extends Bazowa {
    function podajNapis() {
      return $this->napis;
    }
  }

  $obiekt = new Pochodna();
  print($obiekt->podajNapis());
?>

Dziedziczenie pola chronionego

<?php
  class Bazowa {
    protected $napis;
    function __construct() {
      $this->napis = "Napis dodany w klasie bazowej";
    }
  }

  class Pochodna extends Bazowa {
    function podajNapis() {
      print($this->napis);
    }
  }

  $obiekt = new Pochodna();
  // To jest błąd:
  $obiekt->napis = "Czy tak można?";
  $obiekt->podajNapis();
?>

Predefiniowane metody w klasie Pochodna

<?php
  class Bazowa {
    private $napis;
    function __construct() {
      $this->napis = "Napis dodany w klasie bazowej";
    }
    function podajNapis() {
      return $this->napis;
    }
  }

  class Pochodna extends Bazowa {
    function podajNapis() {
      $str = parent::podajNapis();
      print("Dostęp z klasy Pochodna: '$str'");
    }
  }

  $obiekt = new Pochodna();
  $obiekt->podajNapis();
?>

Inny przykład (koszyk)

<?php

/*
 * Definicja klasy Koszyk sklepowy
 *
*/
class Koszyk {

  /*
   * Definicja zmiennej - tablicy asocjacyjnej
   * zawierającej numery artykułów i ich ilość
   *
  */
  var $artykuly;

  // Funkcja dodająca podaną ilość artykułów do koszyka
  function dodaj($numer, $ilosc) {
    $this->artykuly["$numer"] += $ilosc;
  }

  // Funkcja usuwająca podaną ilość artykułów z koszyka
  function usun($numer, $ilosc) {
    if($this->artykuly["$numer"]>$ilosc)
      $this->artykuly["$numer"]-=$ilosc;
    else
      $this->artykuly["$numer"]=0;
  }

  // Funkcja wyświetlająca zawartość koszyka
  function wyswietl() {
    //while(list($k, $v) = each($this->artykuly)) {
    foreach ($this->artykuly as $k => $v) {
      if($v>0) {
        echo "Artykuł nr $k - $v sztuk \n";
      }
    }
  }
}

/*
  Przykład wykorzystania
*/

$koszyk = new Koszyk;
$koszyk->dodaj('20', 2);
$koszyk->dodaj('12', 4);
$koszyk->dodaj('20', 5);
$koszyk->usun('12', 2);
$koszyk->wyswietl();

?>

wykonanie powyższego przykładu w wyniku zwróci:

Artykuł nr 20 - 7 sztuk
Artykuł nr 12 - 2 sztuk
Twoja ocena: Brak Średnio: 4 (4 głosy)

Dodaj nową odpowiedź

Informacja:

Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich, mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Upewnij się, że twoja wypowiedź nie godzi w niczyje mienie.

  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <strong> <blockquote> <code>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

Łapirobot
Proszę odpowiedzieć
9
W
m
S
h
E
U
E
9
y
Enter the code without spaces and pay attention to upper/lower case.