4_PHP_OOP

Embed Size (px)

Citation preview

  • 7/27/2019 4_PHP_OOP

    1/37

    P a s q u a l e t t i V e r o n i c a

  • 7/27/2019 4_PHP_OOP

    2/37

    2

    personalizzato, non esistente fra i tipi tradizionali di PHP, ma creato da noi.

    Gli oggetti sono formati principalmente da attributi e metodi.

    Gli attributi sono delle variabili proprietarie dell'oggetto, semplici o complesse,uindi anche Arra o O etti.

    I metodi invece, sono delle funzioni proprietarie dell'oggetto, e fra questi ce ne

    sono ue mo to mportant ostruttor e struttor .

  • 7/27/2019 4_PHP_OOP

    3/37

    3

    (oggetto), PHP li rimpiazzer con dei metodi propri di default.

    Il costruttoreverr chiamato automaticamente da PHP, ogni volta che verrcreato un oggetto (istanza), mentre il distruttore sar chiamato quando l'oggetto

    verr distrutto, ossia quando non esiste pi alcun riferimento all'oggetto oppure

    alla fine dello script.

    ',classe che abbia lo stesso nome di quest'ultima, oppure potete usare la parolachiave__construct().

  • 7/27/2019 4_PHP_OOP

    4/37

  • 7/27/2019 4_PHP_OOP

    5/37

    -

    5

    ,costruttore.

    Il costruttore prende in input tre parametri ($n_nome, $n_cognome,n_ ata c e an r a memor zzare r spett vamente ne propr attr ut

    ($nome, $cognome, $datanascita), a cui acceder tramite la parolachiave this.

    Con this l'oggetto pu richiamare i suoi attributi e metodi, in quantos n ca ogge o s esso.

    Subito dopo this segue l'operatore di selezione -> che punta ad un

    determinato attributo o metodo alla sua destra, appartenenteall'oggetto alla sua sinistra (this).

  • 7/27/2019 4_PHP_OOP

    6/37

    -

    6

    ,dell'attributo/metodo.

    Infine troviamo il metodo stampaPersona() che semplicementestampa gli attributi dell'oggetto tramite il costrutto echo.

  • 7/27/2019 4_PHP_OOP

    7/37

    -

    7

    .

    Test

  • 7/27/2019 4_PHP_OOP

    8/37

    -

    " "

    8

    ,parola chiave newseguita dal costruttore della classe con i rispettivi

    parametri.

    A seguire richiamiamo il metodo "stampaPersona()" con l'operatore- .

  • 7/27/2019 4_PHP_OOP

    9/37

    -

    " "

    9

    . ,attributi, il costruttore e il metodo, sono dichiarati con la parola chiave

    public.

    Questo ci consente di usarli e richiamarli liberamente nello script' .

    La parola chiave public un modificatore di accesso, che serve astabilire che tipo di restrizioni si devono avere lavorando su quel dato.

  • 7/27/2019 4_PHP_OOP

    10/37

    10

    - ,possono essere utilizzati sia all'interno che all'esterno della classe

    madre e di quelle derivate da essa (ereditariet)t s->mem ro oppure oggetto->mem ro

    - ,

    solo all'interno delle classi madri e derivate($this->membro)

    private - I membri dichiarati private, possono essere utilizzati solo'

    ($this->membro)

  • 7/27/2019 4_PHP_OOP

    11/37

    " "

    11

    ,come public, il linguaggio ci consente di agire direttamente su di essi,

    senza dover richiamare il costruttore ogni volta che dobbiamomo care un a r u o e s anza u en e :

    $utente = new Persona("John", "Doe", "1-1-1970");

    " "-

    $utente->cognome = "Arnavisca";

    ->

    // output = Nome : Santiago / Cognome : Arnavisca / Data di nascita : 1-

    1-1970

  • 7/27/2019 4_PHP_OOP

    12/37

    12

    classe "Persona", avremmo ricevuto dal server un errore sollevato

    dalla riga $utente->nome = "Santiago"; Avremmo ottenuto un errore equivalente anche utilizzando il

    modificatore di accesso protected, in quanto protected stabilisce chel'attributo o metodo cos dichiarato u essere utilizzato solo

    all'interno della classe, ma a differenza di private, ne consentel'utilizzo anche nelle classi derivate, argomento che tratteremo pi

    .

  • 7/27/2019 4_PHP_OOP

    13/37

    13

    ,sapere che per utilizzare un membro di una classe, un attributo o un

    metodo, obbligatorio creare un'istanza di tale classe attraverso laparo a c ave new, come ustrato n prece enza.

    " " " " " ", , - -

    attributo e ogni metodo.

  • 7/27/2019 4_PHP_OOP

    14/37

    ' " "

    14

    , ,colori di base.Colore.php

  • 7/27/2019 4_PHP_OOP

    15/37

    15

    .E' sufficiente specificare il nome della classe seguito dai doppi due punti e il nome delmembro :test.php

  • 7/27/2019 4_PHP_OOP

    16/37

    -

    16

    scuro, sar sufficiente assegnarvi tale valore all'inizio dello script, rendendo cos

    effettiva la modifica in tutto il codice, senza peraltro modificare la classe che.

    Nell'esempio che segue, utilizzeremo il metodo statico "stampaColore()" pervisualizzare i colori sul browser.

    test.php

  • 7/27/2019 4_PHP_OOP

    17/37

    '

    17

    , .Il modo corretto per accedervi dall'interno mediante il costrutto self:

  • 7/27/2019 4_PHP_OOP

    18/37

    18

    ,essere modificati una volta dichiarati e definiti. Prendiamo nuovamente in esempio la classe"Colore" esaminandone un utilizzo con le costanti :

    Colore.php

  • 7/27/2019 4_PHP_OOP

    19/37

    19

    dichiarazione.

    I nomi delle costanti in PHP 5 sono sempre Case Sensitive, ed buona norma,non obbligatorio.

    test.php

  • 7/27/2019 4_PHP_OOP

    20/37

    '

    20

    ,programmazione orientata agli oggetti, a cui si appoggiano altri

    metodi avanzati di programmazione come ad esempio ilo mor smo o e ass stratte c e ve remo p avant .

    '

    sottoclassi) basate su classi gi esistenti (classi base osuperclassi).

    Un grande vantaggio quello di poter riutilizzare il codice di una.

  • 7/27/2019 4_PHP_OOP

    21/37

    '

    21

    flessibile, in quanto permette una generalizzazione molto pi forte di

    un concetto, rendendo pi facile descrivere una situazione di vita reale.

    Pensate alla classe base come ad un oggetto che descrive un concetto,

    specializzazione di tale concetto, esteso mediante propriet e metodiaggiuntivi.

  • 7/27/2019 4_PHP_OOP

    22/37

    Oggetti e Ereditariet:

    Animale. h

    22

  • 7/27/2019 4_PHP_OOP

    23/37

    Oggetti e Ereditariet:

    Cane. h

    23

  • 7/27/2019 4_PHP_OOP

    24/37

    Oggetti e Ereditariet:

    24

  • 7/27/2019 4_PHP_OOP

    25/37

    25

    accesso protected, ossia pu essere utilizzato solo all'interno della

    classe madreAnimale e all'interno di tutte le classi da essa derivate,qu n anc e ane e a na.

    utilizzare parent:: invece di this, in questo modo accediamodirettamente alla classe base, allo stesso modo con cui self::vieneusa o a pos o s.

  • 7/27/2019 4_PHP_OOP

    26/37

    26

    .

  • 7/27/2019 4_PHP_OOP

    27/37

    27

    .

  • 7/27/2019 4_PHP_OOP

    28/37

    28

    .

  • 7/27/2019 4_PHP_OOP

    29/37

    29

    Il Polimorfismo la capacit di utilizzare un unico metodo in grado di

    comportarsi in modo specifico quando applicato a tipi di datodifferenti.

    ues o reso poss e graz e a ere ar e , c e consen e a e

    sottoclassi di ridefinire i metodi ereditati dalla classe base.

    Il linguaggio pu identificare una qualunque istanza della sottoclasse,come un'istanza della classe base, poich per il principio

    e ere ar e , ogn so oc asse poss e e per na ura u e epropriet della classe base (attributi e metodi).

  • 7/27/2019 4_PHP_OOP

    30/37

    Esem io

  • 7/27/2019 4_PHP_OOP

    31/37

    31

    per il nostro metodo ("zampe()"), ereditato direttamente dalla classe

    baseAnimale.

    Flessibilit della funzione esterna numeroZampe(), che sar in,

    un secondo momento senza necessit di apportare modifiche allafunzione numeroZampe() o alle tre classi (Animale, Cane e Gallina).

  • 7/27/2019 4_PHP_OOP

    32/37

    32

    ,new, veniva restituito l'oggetto stesso e questo veniva memorizzato

    nella variabile specificata.

    In PHP 5 invece, quando creiamo una nuova istanza ($oggetto =,

    riferimento ad esso.

  • 7/27/2019 4_PHP_OOP

    33/37

    '

    33

    ,l'assegnazione avverr per riferimento poich l'istanza stessa contiene

    solo un riferimento all'oggetto creato.

    Se volete quindi creare una copia di un'istanza, dovrete clonarla.

    dopo l'operatore di assegnazione "=".

  • 7/27/2019 4_PHP_OOP

    34/37

    Esempio clonazione Oggetti

    34

    class Oggetto{public $valore;

    public function Oggetto($v){$this->valore = $v;

    }}

    =

    $istanza2 = $istanza1; // Assegnazione per riferimento$istanza3 = clone $istanza1; // Clonazione oggetto$istanza2->valore = 7; // Modifica anche $istanza1$istanza3->valore = 13;

    echo $istanza1->valore; // Non stampa 5 ma 7

    -echo $istanza3->valore; // Stampa 13

    ?>Clonando un oggetto, per definizione si crea una copia esatta di tale oggetto, quindi iriferimenti contenuti in esso saranno comunque copiati come tali, e dopo la clonazione

    conterranno ancora il riferimento alla stessa risorsa di prima.

  • 7/27/2019 4_PHP_OOP

    35/37

    Esempio clonazione Oggetti

    35

    onan o un ogge o, per e n z one s crea una cop a esa adi tale oggetto, quindi i riferimenti contenuti in esso saranno

    conterranno ancora il riferimento alla stessa risorsa di prima.

  • 7/27/2019 4_PHP_OOP

    36/37

    36

    e c ass as ra e c perme ono spec care conesattezza quali classi e quali metodi devono

    poter essere utilizzati.

    La sottoclasse derivata da una classe astratta, dovrobbli atoriamente definire tali metodi astratti er far s chel'ereditariet venga accettata.

  • 7/27/2019 4_PHP_OOP

    37/37

    zampe;

    dichiarato, mentre ladefinizione avviene

    abstract protected function suono();}class Cane extends Animale{

    rettamente ne a c asse

    derivata.

    parent::Animale(4);

    }

    public function suono()" "

    Dichiarando Cane senza ladefinizione di suono(),

    }$rex = new Cane();$rex->numeroZampe(); // Stampa 4

    avremmo o enu o un errore.

    rex->suono ; ampa au?>