OOP

Design patterns in PHP

I design patterns sono qualcosa di fondamentale per chi vuole sviluppare. Esemplificando molto, essi sono la sintesi delle buone abitudini e delle migliori soluzioni ai più grandi problemi già risolti della programmazione.

Parafrasando la definizione di wikipedia, con design pattern si intende  ”una descrizione o un modello da applicare per risolvere un problema che può presentarsi in diverse situazioni durante la progettazione e lo sviluppo del software“.

Buona parte dei design patterns affronta le tematiche della programmazione ad oggetti e descrive le relazioni che intercorrono (o dovrebbero intercorrere) tra gli oggetti in un particolare contesto. Questo significa che un design pattern non è una soluzione fatta e finita ad un problema, non è una porzione di codice da riusare, bensì un approccio sensato ad una situazione nota.
Read More…

Confronto di oggetti in PHP: ordinare comparando per una specifica proprietà

In questo articolo affronteremo il tema del confronto in PHP tra oggetti dello stesso tipo in base ad una specifica proprietà (o campo) dell’oggetto stesso. Nello specifico vedremo come implementare l’ordinamento di un array di oggetti da noi definiti tramite la funzione nativa PHP usort e un metodo da noi scritto che faccia la comparazione di due oggetti.

Cominciamo col definire un oggetto che abbia alcune proprietà, come ad esempio un’ipotetica Automobile che sarà dotata di alcune caratteristiche classiche come la marca, il modello, il numero di cavalli e il colore. La nostra classe PHP (in una versione molto semplificata) sarà così fatta:

class Automobile() {
  $marca = 'Casa Automobilistica';
  $modello = 'Base';
  $num_cavalli = 16;
  $colore = 'Nero';
  function Automobile($marca, $modello, $num_cavalli, $colore){
    $this->marca = $marca;
    $this->modello = $modello;
    $this->num_cavalli = $num_cavalli;
    $this->colore = $colore;
  }
}

Ora supponiamo di avere un’altra classe Ricerca, la quale contiene un array che chiameremo (con molta fantasia) $array_automobili composto da oggetti di tipo Automobile e di volerli ordinare all’interno dell’array stesso per il numero di cavalli. Tutto ciò che dobbiamo fare è scrivere un metodo che faccia il compare su una specifica proprietà tra due oggetti di tipo Automobile (a ben guardare, due oggetti qualsiasi che abbiano la proprietà in questione) e passarlo come parametro alla funziona usort. Nel nostro caso, per pigrizia, faremo una funzione (un metodo della classe Automobile) specifica per il campo num_cavalli che ordini le vetture in modo ascendente rispetto a quel campo.

function cmpAscNumCavalli($a, $b) {
  if ($a->num_cavalli == $b->num_cavalli) {
    return 0;
  }
  return ($a->num_cavalli < $b->num_cavalli) ? -1 : 1;
}

Per ordinare ora $array_automobili, il nostro array di oggetti di tipo Automobile, sarà sufficiente invocare la funzione PHP usort, passandole come parametri l’array stesso e il nome (quindi una stringa) del metodo che dovrà utilizzare per effettuare l’ordinamento.

Tenendo presente che nel nostro esempio stiamo lavorando in un contesto di classi e che la funzione che chiamiamo è un metodo della classe Automobile, invocata all’interno del codice della classe Ricerca, è necessario specificare anche a quale classe appartiene il metodo. Il tutto si scrive in questa maniera:

usort ( $array_automobili, array( 'Automobile', 'cmpAscNumCavalli' ) );

NB. Ricordo che usort non restituisce un nuovo array (in quanto funzione void) ma modifica direttamente l’array passato come parametro.

Rilasciato PHP 5.3

Dopo quattro release candidate, è uscita il 30 giugno 2009 l’ultima major release del linguaggio di programmazione PHP.

Con la versione 5.3, PHP si conferma un linguaggio OOP stabile che vuole essere sempre più diffuso in applicazioni enterprise e al passo coi tempi. Vediamo infatti, oltre alla chiusura di circa 140 bugs, la presenza di alcune nuove features da non sottovalutare, tra cui i concetti di closures, namespaces, late static building e garbage collection.

Vi rimando all’annuncio ufficiale per i dettagli più infimi, suggerendovi di prestare attenzione anche all’elenco delle poche ma rilevanti retro-incompatibilità.

La programmazione ad oggetti in PHP 5

“La programmazione orientata agli oggetti (OOP, Object Oriented Programming) è un paradigma di programmazione, che prevede di raggruppare in un’unica entità (la classe) sia le strutture dati che le procedure che operano su di esse, creando per l’appunto un “oggetto” software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell’oggetto stesso. La programmazione orientata agli oggetti può essere vista come una modulazione di oggetti software sulla base degli oggetti del mondo reale.” [da Wikipedia.org - Programmazione orientata agli oggetti].

La versione 5 di PHP supporta in modo completo la programmazione ad oggetti da quando è stata rilasciata nel ‘lontano’ luglio 2004. Sebbene siano passati quasi 5 anni, PHP viene utilizzato ancora molto spesso unicamente come linguaggio di scripting: cosa che è più che lecita di per sé, anche se nel contesto delle web application è molto meglio sfruttare la OOP.

Vi suggerisco una ‘guida’ per chi si vuole avvicinare alla programmazione ad oggetti in PHP 5 per la prima volta in modo veloce ma non superficiale. Il titolo della guida è “Learning OOP in PHP ASAP!”.

 Scroll to top