Klasy i obiekty - podstawy
[31]
<?php
class Book { // klasa obiektów
public $authors, $title; // własności
// metoda klasy
// $this = aktualny obiekt (instancja)
public function description() {
return $this->title.', <i>'.$this->authors.'</i>';
}
}
// obiekty danej klasy
$book = new Book();
$book1 = new Book();
$book->title = "1984";
$book->authors = "George Orwell";
var_dump($book);
$book1 = new Book();
$book1->title = "Pan Tadeusz";
var_dump($book1);
echo $book->description();
echo '<br />';
echo $book1->description();
Widoczność (powyżej użyto public):
private: Tylko dla obiektów danej klasy.
protected: Także dla klas pochodnych (zob. dalej)
public: Publiczne (dla wszystkich).
Dziedziczenie [32]
<?php
/*
Dziedziczenie zachowuje metody i własności przodka.
Metody magiczne - nie są wywoływane "wprost", ale z chwilą operowania obiektami:
- __construct - gdy tworzymy obiekt
- __destruct - gdy "zabijamy obiekt"
- __clone - przy kopiowaniu
- __toString - gdy tworzymy jego reprezentację w postaci łańcucha znaków
*/
class Book {
public $authors, $title, $exlibris;
public function __toString() {
return $this->title.', <i>'.$this->authors.'</i>';
}
public function opis():string {
return 'ok';
}
}
class MyBook extends Book {
public $exlibris;
public function __construct(){
$this->exlibris = 'JW';
}
public function __toString() {
if ($this->exlibris)
return parent::__toString().' ['. $this->exlibris.']';
else
return parent::__toString();
}
}
$book = new Book();
$book1 = new MyBook();
var_dump($book->opis());
$book->title = "1984";
$book->authors = "George Orwell";
$book1->title = "Pan Tadeusz";
print (string)$book;
// (string) - rzutowanie na łańcuch znaków
print '<br />';
print (string)$book1;
Konstruktor jako „metoda magiczna”
Metody i własności statyczne
[33]
<?php
/*
Metody statyczne - mogą być używane do włąsności / metod
niezależnych od obiektów (instancji) - dla całej klasy.
Na przykład - jednoznaczny identyfikator.
*/
class Book {
private static $lastId = 0;
private static function nextId() {
return ++self::$lastId;
}
public function __construct(string $title, string $authors) {
$this->id=self::nextId();
$this->title = $title;
$this->authors = $authors;
}
}
$book1 = new Book('Ogniem i Mieczem', 'Henryk Sienkiewicz');
$book2 = new Book('Raport z oblężonego miasta', 'Zbigniew Herbert');
var_dump($book1);
var_dump($book2);
print "<br />book1->id = ".$book1->id;
print "<br />book2->id = ".$book2->id;
[34]
<?php
/*
Metody statyczne i encasulation
*/
class camelCase {
public static function fromUnderscore($ident) {
if (!$ident) return $ident;
$fragments = explode("_", $ident);
var_dump($fragments);
print lcfirst($fragment[0]);
for ($i=1;$i<count($fragments);$i++) {
print ucfirst($fragments[i]);
}
var_dump($fragments);
$result='';
foreach ($fragments as $f) {
$result.=$f;
}
print 'Result='.$result;
return $result;
}
}
echo(camelCase::fromUnderscore('Duze_piwo'));
Metody statyczne często stosuje się także do funkcji / zmiennych, które mogłyby być globalne, ale zostały “zamknięte” w klasach (encapsulation).