Razred je zbirka spremenljivk in funkcij, ki delajo s temi spremenljivkami. Razred definiramo z naslednjo sintakso:
<?php
class Cart
{
var $items; // Predmeti v vozicku
// Dodaj $num predmetov z stevilko artikla $artnr
function add_item ($artnr, $num)
{
$this->items[$artnr] += $num;
}
// Vzemi $num predmetov iz vozicka ki imajo stevilko artikla $artnr
function remove_item ($artnr, $num)
{
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?> |
Zgornje definira razred z imenom Cart, ki ga sestavlja asociativna tabela artiklov in dve funkciji za dodajanje in odstranjevanje predmetov.
| Opozorilo |
Naslednja opozorila so veljavna za PHP 4. Ime stdClass uporablja Zend interno in je zato zasedeno. Uporaba razreda, ki ima ime stdClass, v PHP-ju ni možna. Funkciji __sleep in __wakeup sta posebni funkciji v PHP razredih. Funkcije s tem imenom ne morate imeti v vaših razredih, razen če bi radi uporabili njuno posebno funkcionalnost. Spodaj se nahaja več informacij. PHP si je rezerviral vse funkcije ki se pričnejo z __ kot posebne. Priporočljivo je, da ne uporabljate funkcij z __ razen če bi radi uporabili kak&353;o od dokumentiranih funkcionalnosti. |
Opomba: V PHP 4 so dovoljeni samo initializatorji konstant var. Da bi inicializirali spremenljivko z ne-konstantno vrednostjo, morate imeti inicializacijsko fukcijo, ki je klicana avtomatično, ko kreiramo objekt iz razreda. Taka funkcija se imenuje konstruktor (poglejte spodaj).
<?php /* Nic od tega ne bo delalo v PHP 4. */ class Cart { var $todays_date = date("Y-m-d"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; var $items = array("VCR", "TV"); } /* To je pravilen postopek. */ class Cart { var $todays_date; var $name; var $owner; var $items; function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* itd. . . */ } } ?>
Razredi so tipi, ubistvu so načrti za dejanske spremenljivke. Vi morate ustvariti spremenljivko željenega tipa z operatorjem new.
<?php
$cart = new Cart;
$cart->add_item("10", 1);
$another_cart = new Cart;
$another_cart->add_item("0815", 3); |
To ustvari objekta $cart in $another_cart, oba razreda Cart. Funkcija add_item() $cart objekta je klicana za dodajanje enega predmeta, ki ima številko artikla 10, v objektu $cart. Trije predmeti, ki imajo številko artikla 0815 so dodani v $another_cart.
Oba objekta, $cart in $another_cart imata funkciji add_item(), remove_item() in spremenljivke. To so različne funkcije in spremenljivke. Objekte si lahko predstavljate kot direktorije v datotečnem sistemu. V datotečnem sistemu imate lahko dve različni datoteki README.TXT dokler sta ti dve datoteki vsaka v svojem direktoriju. Tako kot pri direktorijih, kjer morate vpisati celotno pot iz vrhovnega direktorija, morate tu uporabiti celotno ime funkcije, ki jo želite klicati. V PHP-ju bi bil vrhovni direktorij globalni imenski prostor in ločilec za direktorije ->. Tako so imena $var->items in $another_cart->items imena za dve različni spremenljivki. Zapomnite si da je spremenljivka imenovana $cart->items in ne $cart->$items. To pomeni, da ima spremenljivka v PHP-ju samo en dolar znak.
// pravilno, enojni $
$cart->items = array("10" => 1);
// napacno, ker $cart->$items postane $cart->""
$cart->$items = array("10" => 1);
// pravilno, ce je to kar ste zeleli:
// $cart->$myvar postane $cart->items
$myvar = 'items';
$cart->$myvar = array("10" => 1); |
V definiciji razreda nevemo pod kaksnim imenom bo objekt dostopen v našem programu: v trenutku, ko smo pisali razred Cart, ime objekta $cart ali $another_cart ni bilo zmano. Torej ne morate pisati $cart->items v samem Cart razredu. Namesto tega, če želimo dostopati do funkcij in spremenljivk razreda v razredu samem, uporabimo izmišljeno spremenljivko $this, ki si jo lahko predstavljamo kot 'moje' ali 'trenutni objekt'. Torej bi '$this->items[$artnr] += $num' lahko prebrali kot 'dodaj $num k $artnr števcu v moji tabeli predmetov' ali 'dodaj $num k $artnr števcu v tabeli predmetov v trenutnem objektu'.
Opomba: Obstaja kar nekaj zanimivh funkcij za upravljanje razredov in objektov. Oglejte si Razredne/Objektne Funkcije