CLASSI PHP

Ciao a tutti,

Ragazzi, ho bisogno di voi, non riesco a  capire come utilizzate le classi:

class Cart {
    var $todays_date;
    var $name;
    var $owner;
    var $items;
    var $items = array("VCR", "TV");
    function Cart() {
        $this->todays_date = date("Y-m-d");
        $this->name = $GLOBALS['firstname'];
        /* etc ... */
    }
}

Prendo in esempio questo tratto da php.net

In teoria in questa classe vengono prima inizializzate le variabili, e dopo alle stesse viene assegnato un valore tramite la funzione Cart() dico bene?

Poniamo che ciò che ho detto sia corretto, una volta definiti i valori, facendo una cosa come:

$cart = new Cart;

e poi $cart->add_item(funzione);

andrei ad aggiungere l'elemento $cart al carrello. Esatto?

Ciò di cui non mi capacito quindi è l'effettivo utilizzo delle classi in php.

Cosa sono più di semplici funzioni dove le variabili sono isolate?

(Può anche darsi che non c'ho capito nulla) :D

inviato 8 anni fa
Pixelate
X 0 X

Neanch'io ci capisco molto al momento  (:D), ti rispondo più che altro perchè anch'io sto iniziando a studiare un pò di OOP (programmazione orientata agli oggetti)! Venendo alla domanda, chiaramente, le classi non sono semplici funzioni, ma l'espressione logica di un oggetto (almeno, così l'ho interpretata io fin'ora). Purtroppo dalla tua domanda, noto che stai facendo il mio stesso errore, e cioè capire OOP leggendo listati; purtroppo non è così, leggi prima cos'è OOP in generale (classi, oggetti, incapsulamento, ereditarietà, ecc.) e poi li applichi al php. Versione 5 però, mi raccomando!

Un ultima cosa sull'utilità delle classi e quindi, più in generale, di OOP: mi sto avvicinando a questo "metodo" perchè più scrivo listati lunghi, più il problema della manutenzione si fa pesante, soprattutto se si vogliono riutilizzare certi script. Tutto questo anche se faccio un uso massiccio delle funzioni.

Spero di esserti stato un minimo d'aiuto, casomai studiamo OOP insieme in un 3d speciale!  :bye:

risposto 8 anni fa
grifis78
X 0 X

Confermo quanto già detto, l'argomento è molto vasto e questa discussione rischia di essere troppo generica. Sarebbe meglio focalizzare l'attenzione su un problema alla volta.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Infatti Gianni,  hai perfettamente ragione. In ogni caso vorrei fare una domanda: sto studiando OOP su un libro di C/C++ (io sono fermo al C ed alla programmazione procedurle da anni...). Cercando però la controparte su PHP, l'unico riferimento che ho è PHP 5 Bible, che è chiaro in tutto come libro ma tranne nella parte dedicata proprio all'OOP... Chi mi sa consigliare un buon testo a questo proposito?

risposto 8 anni fa
grifis78
X 0 X

pensa che secondo me PHP 5 Bible è il più chiaro sull'argomento.... :crazy:

Forse gli unici libri decenti sull'OOP sono scritti per il Java.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

ragazzi, in teoria ho capito la composizione delle classi, l'unica cosa che non riesco a capire è come possano essere utili nello sviluppo di applicativi web, va bene il fatto che facciano risparmiare tempo perchè basta richiamarle su una nuova variabile ed il gioco è fatto, però ciò che secondo me manca è un effettivo esempio sul loro reale utilizzo..

risposto 8 anni fa
Pixelate
X 0 X

la programmazione orientata agli oggetti se utilizzata permette lo sviluppo di software modulare, riutilizzabile e di facile manutezione.

Le caratteristiche base della programmazione a oggetti sono :

  • polimorfismo, cioè la possibilità di specializzare un metodo in una classe derivata in modo che il programma possa lavorare indifferentemente sulla famiglia di classi derivate da quella genitrice

    <?php
    //la classe animale rappresenta la FAMIGLIA di oggetti
    abstract class Animale
    {
       abstract public function riproduciVerso();
    }
    
    //gatto e' un sotto-tipo della famiglia Animale
    class Gatto extends Animale
    {
       public function riproduciVerso()
       {
          echo 'miao';
       }
    }
    //cane e' un sotto-tipo della famiglia Animale
    class Cane extends Animale
    {
       public function riproduciVerso()
       {
          echo 'bau';
       }
    }
    
    $mieiAnimali = array(new Gatto, new Cane);
    
    foreach ($mieiAnimale as $animale) {
       $animale->riproduciVerso();
    }

    Come si può facilmente notare, il ciclo foreach scorre il vettore $mieiAnimali e riproduce il verso dell'animale, senza necessariamente fare distinzione tra cane o gatto ( o topo o qualunque altro animale estenda la classe Animale).

    Questo può sembrare inutile ad un neofita (soprattutto in linguaggi debolmente tipizzati come php) ma trova comunque ampio utilizzo.

  • ereditarietà, l'esempio di prima va bene anche in questo caso, infatti la classe Animale è una superclasse (classe genitore) e Cane e Gatto sono due sue sottoclassi (classi derivate).

    In php per estendere una classe si usa la clausola extends ;

    Php non supporta l'ereditarietà multipla, questo vuol dire che una classe può essere derivata solo da una superclasse, ma comunque php permette di usare le interfacce, una classe può implementare più di un'interfaccia.

  • incapsulamento, ovvero l'abilità di un oggetto (che non è altro che un tipo di dato) di portare con se tutte le azioni che possono essere compiute su di lui al suo stesso interno, senza che i meccanismi alla base del loro funzionamento siano note all'esterno (la cosiddetta "scatola nera", sai cosa fa, ma non sai come).

    È attraverso l'incapsulamento che si realizza l'information hiding

    L'incapsulamento unito al polimorfismo permette di creare codice perfettamente adattabile a svariati utilizzi.

spero di essere stato abbastanza esaustivo.

Purtroppo il primo approccio all'oop è sempre così, sembra di doversi complicare la vita per fare quello che prima si faceva in poco tempo.

Tra qualche mese vedrai che non riuscirai più a tornare indietro  ;D

Non esistono esempi di reale utilizzo, ma nel senso che sei tu a dover decidere cosa fare e come.

Ad esempio se io dovessi sviluppare uno script per la validazione di un form, procederei con l'analisi del problema ed individuerei i dati necessari:

Form : rappresenta il form della pagina html, un vettore conterrà tutti i campi del form html.

class Form 
{
   private $_fields = array();
   private $_validator;
   
   //il costruttore viene chiamato all'atto della creazione
   //di una variabile di tipo Form :
   //$form = new Form($validatore); 
   //il costruttore richiede un'istanza, ovvero una variabile di tipo classe
   //come parametro, e in piu' richiede specificamente istanze di
   //Valida_Form (le sotto-classi di Valida_Form sono ammesse perche' suoi sotto tipi)
   public function __construct(Valida_Form $validator = null)
   {
      if ($validator == null) {
         exit ('Nessun validatore specificato!');
      }
      $this->_validator = $validator;
      foreach ($_POST as $field => $value) {
         $this->_fields[$field] = $this->_validator->valida($value);
      }
   }
   
   public function getField($field)
   {
      return $this->_fields[$field];
   }
}

//rappresenta una famiglia di "validatori" che permettono
//questa e' del tutto generica come vedi
abstract class Valida_Form
{
   abstract public function valida($string);
}

//classe validatore, questa classe valida i campi contenenti
//codice html, e' una sotto-classe di Valida_Form
//si puo' dire quindi, che questa sotto-classe e' SPECIALIZZATA 
//a svolgere un determinato compito
class Valida_HTML extends Valida_Form
{
   public function valida($string) 
   {
      return htmlentities(strip_tags($string));
   }
}


//dopo aver definito i dati e le azioni da compiere su di essi
//puoi passare al loro utilizzo:
$validatore = new Valida_Html();
$dati = new Form($validatore);
echo $dati->getField('nome');

Immagina ora di estendere Valida_Form e creare la classe Valida_Stringa, Valida_Email, ti basterebbe passare una loro istanza alla classe Form per eseguire la validazione su tutti i campi del form, con il minimo sforzo e con la massima eleganza.

Ovviamente le classi che ho fatto sono meramente dimostrative, quindi non servono a molto, ma aggiungendo caratteristiche si può ottenere un completo sistema di validazione dell'input.

Questo era dunque un esempio di utilizzo della oop per un'applicazione web, in pochi minuti (5 circa) si è messo su un sistema di validazione di form in massa, riutilizzabile in diversi scenari ed espandibile con nuove caratteristiche e potenzialità. che ne dici?

Spero di essere stato esaustivo e di aver risposto a qualche tuo dubbio, in caso contrario, sai dove chiedere ;)

 :bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

Anche io ho difficoltà ad assimilare l'uso delle classi, per il semplice fatto che quasi non le utilizzo.

Mi limito ad usare quelle che trovo in giro quando mi sono utili nel caso specifico o perchè risolvono un determinato problema.

Quindi non posso affermare che non servono (anzi) ma penso che semplicemente esse svelino la loro potenzialità e la loro

effettiva utilità solo ad un certo livello di programmazione.

....giusto per dire la mia ;D :P

ciao

risposto 8 anni fa
frankphp
X 0 X

innanzitutto condivido il post di trashofmasters

e di seguito diciamo la mia ;-)

io provengo dall'actionscript e passando in questo linguaggio dalla procedurale all'OOP

ho riscontrato i seguenti ulteriori giovamenti

operando una progettazione fatta non piu sui dati e sulle procedure ma su oggetti

fatta l'analisi la fase di progettazione è piu veloce

seppur  la fase di implementazione mi risulta piu lenta rispetto alla procedurale

questa viene compensata in un secondo progetto dove posso utilizzare tranquillamente la stesse classi

in un ambiente di lavoro con piu figure professionali

è piu semplice far utilizzare una classe che far scrivere codice procedurale ben fatto

in fase di implementazione grazie all'incapsulamento

non devo stare attendo ai nomi delle innumerevoli variabili

;-)

risposto 8 anni fa
dyd666
X 0 X

Anche io sono all'inizio con questa metodologia di programmazione, cmq se volete un buon testo per iniziare a smanettare con la OOP vi consiglio

PHP 5 Guida completa - Andi Gutmans, Stig S. Bakken, Derick Rethans - Apogeo

risposto 8 anni fa
Kaesar83
X 0 X

Si l'ho letto, anche se non lo consiglio a chi non ha una solida esperienza di programmazione.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda