php

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.

 Scroll to top