leskioni 11.1 klasat

Download Report

Transcript leskioni 11.1 klasat

Klasat ne PHP dhe
Orientimi nga Objektet
Leksion 11.1
Çfare eshte nje klase ?
Konceptualisht, nje klase
perfaqeson nje objekt, me
metoda dhe variabla qe i
shoqerohen atij.
Percaktimi i Klases
<?php
class dog {
public $name;
public function bark() {
echo ‘Woof!’;
}
}
Shembull i percaktimit te
?>
nje klase per nje qen .
Objekti dog ka nje atribut
te vetem, emrin, dhe mund
te kryeje veprimin e lehjes
(barking).
Percaktimi i Klases
<?php
class dog {
class
public dog
$name;{
public function bark() {
echo ‘Woof!’;
}
}
?>
Percaktohet emri
klases.
Percaktimi i Klases
<?php
class dog {
public $name
public $name;
public function bark() {
echo ‘Woof!’;
}
Percaktohet nje
}
atribut objekti
?>
(variable), emri i
qenit.
Percaktimi i Klases
<?php
class dog {
public $name;
function bark() {
echo ‘Woof!’;
public
function bark()
}
}
echo ‘Woof!’;
?>}
{
Percaktohet nje veprim
objekti (function), te
lehurit e qenit.
Percaktimi i Klases
<?php
class dog {
public $name;
public function bark() {
echo ‘Woof!’;
}
}}
?>
Perfundon
percaktimi i
Klases
Percaktimi i Klases
Ne menyre te ngjashme me percaktimin e nje
funksioni ...
Percaktimi nuk ben asgje ne vetvete. Ai eshte nje plan, apo
pershkrimi, i nje objekti. Ne menyre qe ajo te beje diçka, juve
ju duhet ta perdorni klasen ...
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
Perdorimi i Klases
<?php
require(‘dog.class.php’);
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
Perfshihet skedari
qe permban
Percaktimin e
Klases
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new
dog();
$puppy
= new
dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
Krijohet nje
instance e re e
klases.
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
$puppy->name
= ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
Variablit emri te
kesaj instance i
jepet vlera ‘Rover’.
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name}
says ”;
echo
“{$puppy->name}
$puppy->bark();
?>
says ”;
Perdoret variabli
name i instance
ne nje shprehje
echo..
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
$puppy->bark();
?>
Perdoret
metoda bark()
e objektit dog .
Perdorimi i Klases
<?php
require(‘dog.class.php’);
$puppy = new dog();
$puppy->name = ‘Rover’;
echo “{$puppy->name} says ”;
$puppy->bark();
?>
Nje dhe vetem nje shenje
dollari
$puppy->name = ‘Rover’;
Gabimi me i zakonshem eshte qe te vendoset me
shume se nje shenje dollari kur aksesohen
variablat.
$puppy->$name = ‘Rover’;
Perdorimi i atributeve brenda
klases...
• Nese ju nevojitet qe te perdorni variablat e klases
brenda ndonje veprimi te klases, perdorni variablin
special $this ne percaktimin e klases:
class dog {
public $name;
public function bark() {
echo $this->name.‘ says Woof!’;
}
}
Metodat Konstruktor
• Nje metode Konstruktor eshte nje funksion qe
ekzekutohet automatikisht kur krijohet nje instance e
klases per here te pare.
• Nje konstruktor krijohet duke perfshire nje funksion me
emrin __construct ne percaktimin e klases.
• Mbani mend… Nese konstruktori kerkon argumente, ato
duhet t’i kalohen kur krijohet instanca!
Shembull i Konstruktorit
<?php
class dog {
Constructor function
public $name;
public function __construct($nametext) {
$this->name = $nametext;
}
public function bark() {
echo ‘Woof!’;
}
}
?>
Shembull i Konstruktorit
<?php
…
$puppy = new dog(‘Rover’);
…
?>
Argumentet e konstruktorit
kalohen gjate krijimit te nje
objekti.
Fusha e veprimit te klases
• Ashtu si funksionet, secili objekt instance ka fushen e tij
te veprimit lokale
Psh: Nese jane krijuar dy objekte dog $puppy1 dhe
$puppy2, emrat e dy qeneve $puppy1->name dhe
$puppy2->name jane teresisht te pavarur...
Trashegimia
• Fuqia e vertete e perdorimit te klasave eshte veçoria e
trashegimise – krijimi i nje hierarkie klasash te nderlidhura.
dog
Prind
Bij
poodle
alsatian
Trashegimia
• Klasat bij trashegojne te gjitha metodat dhe variablat e
klases prind, dhe mund te shtojne edhe tjera te vetat.
Psh: Klasa bij poodle trashegon variablin ‘name’ dhe
metoden ‘bark’ nga klasa dog, dhe mund te shtojne edhe
te tjera.
Shembull i Trashegimise (inheritance)
The American Kennel Club (AKC) recognizes three sizes of poodle - Standard,
Miniature, and Toy…
class poodle extends dog {
public $type;
public function set_type($height) {
if ($height<10) {
$this->type = ‘Toy’;
} elseif ($height>15) {
$this->type = ‘Standard’;
} else {
$this->type = ‘Miniature’;
}
}
}
Shembull i Trashegimise
The American Kennel Club (AKC) recognizes three sizes of poodle - Standard,
Miniature, and Toy…
class poodle
poodle extends
dog {
class
extends
dog
{
public $type
public function set_type($height) {
if ($height<10)
{
Vini re perdorimin
e
$this->type = ‘Toy’;
fjalesi
kyçe extends
} elseif
($height>15)
{
$this->type =
‘Standard’;
per te treguar qe klasa
} else {
poodle
eshte= nje bije e
$this->type
‘Miniature’;
}
}
}
klases dog…
Shembull i Trashegimise
…
$puppy = new poodle(‘Oscar’);
$puppy->set_type(12); // 12 inches high!
echo “Poodle is called {$puppy->name},
”;
echo “of type {$puppy->type}, saying “;
echo $puppy->bark();
…
Shembull i Trashegimise
• Eshte e mundur qe te mbi-shkruhet nje metode e prindit
me nje metode te re nese i jepet i njejti emer ne klasen
bije te saj.
class poodle extends dog {
…
public function bark() {
echo ‘Yip!’;
}
…
}
Konstruktoret e bijve?
• Nese nje klase bije ka nje funksion konstruktor, ai
ekzekutohet dhe cdo konstruktor i klases prind
injorohet.
• Nese nje klase bije nuk ka nje konstruktor,
ekzekutohet konstruktori i klases prind te saj.
• Nese as klasa bije e as klasa prind nuk ka konstruktor,
ekzekutohet konstruktori i klases gjysh…
• … etj.
Objektet brenda objekteve
• Eshte e mundur qe te perfshihen objekte brenda
nje objekti tjeter:
…
class dogtag {
public $words; $puppy = new dog;
$puppy->name = “Rover";
}
class dog {
public $name;
public $tag;
}
$poppy->tag = new dogtag;
$poppy->tag->words = “blah”;
…
public function bark() {
echo "Woof!\n";
}
Fshirja e objekteve
• Deri tani objektet qe kemi krijuar nuk jane shkaterruar
deri ne fund te skripteve tona…
• Por, ashtu si me variablat, eshte e mundur qe te
shkaterrohet nje objekt ne menyre eksplicite duke
perdorur funksionin unset().
Objektet si argumente te funksioneve
• Objektet mund te kalohen edhe si argumente
per funksionet dhe aty ata mund t’i perdorin te
gjithe methodat/variablat e tyre brenda
funksionit.
• Gjithsesi kujtoni qe, ashtu si funksionet objekti
kopjohet kur kalohet si argument pervec rastit
kur ju e specifikoni argumentin si variabel me
reference &$variable
Perse Orientim me Objekte?
Arsye 1
Kur ju e keni te qarte konceptin e objekteve, kodi
i orientuar nga objektet, i emertuar ne menyre
intuitive, behet i lehte per t’u kuptuar.
PSh:
$order->display_basket();
$user->card[2]->pay($order);
$order->display_status();
Perse Orientim me Objekte?
Arsye 2
Kodi ekzistues behet me i lehte per t’u
mirembajtur.
Psh: Nese ju deshironi qe te zgjeroni aftesite e nje
pjese te kodit, ju thjesht mund te ndryshoni
percaktimin e klases.
Perse Orientim me Objekte?
Arsye 3
Kodi i ri mund te shkruhet me shpejt kur ju keni
nje librari klasash te pershtatshme.
Psh: Ju nevojitet nje objekt i ri…? Zakonisht mund
te zgjeroni nje objekt ekzistues.
Per me teper informacion…
• Ne kete leksion u paraqiten vetem elementet
kryesore te OOP ne PHP.
• Per me teper informacion klikoni:
http://www.php.net/manual/en/language.oop5.php
Pyetje?