Home > Refactoring > PHP Refactoring – Lez. 2: proprietà array di una classe

PHP Refactoring – Lez. 2: proprietà array di una classe

Oggi parleremo delle proprietà composte di una classe, ovvero di proprietà contenenti un array.

Abbiamo visto nella lezione precedente (PHP Refactoring – Lez. 1: proprietà di una classe) come scrivere le proprietà semplici di una classe.

Per quanto riguarda le proprietà composte valgono le regole di naming convention introdotte nel precedente tutorial, eccetto  i metodi di accesso alle stesse. Di seguito lo standard da seguire a livello di classe.

Metodo addXXX

Per aggiungere un elemento ad una proprietà composta utilizzeremo un metodo con la seguente signature:

public function addXXX($valore, $chiave=null)

Dove XXX deve essere sostituito con il nome della proprietà.

Di seguito è fornito un esempio:

class Classe {

private $alunni;

public function addAlunni($valore, $chiave=null) {

if (is_array($valore)) {

foreach($valore as $posizione => $elemento){

if ($chiave!=null) {

$this->alunni[$posizione] =

$elemento;

} else {

$this->alunni[] = $elemento;

}

}

} else if ($chiave == null) {

$this->alunni[] = $valore;

} else {

$this->alunni[$chiave] = $valore;

}

}

}

Come si può notare i parametri da passare sono due: il primo obbligatorio, il secondo opzionale.

Non appena entriamo nel metodo addXXX viene controllato se il parametro $valore è un array. in caso affermativo cicliamo su quest’ultimo, e se il parametro $chiave è null accodiamo gli elementi nella proprietà; se invece $chiave è diverso da null inseriremo il valore $elemento nella chiave $posizione.

Nel caso $valore non sia un array e $chiave sia uguale a null inseriremo $valore direttamente nella proprietà $alunni.

Infine l’ultimo caso è se il parametro $chiave è valorizzato; in tal caso inseriremo $valore nella posizione $chiave della proprietà $alunni della classe.

Metodo removeXXX

Per rimuovere un elemento da una proprietà composta utilizzeremo un metodo con la seguente signature:

public function removeXXX($chiave=null)

Dove XXX deve essere sostituito con il nome della proprietà.

Di seguito è fornito un esempio:

class Classe {

private $alunni;

public function removeAlunni($chiave=null) {

if (is_array($chiave)) {

foreach($chiave as $posizione=> $valore){

unset($this->alunni[$valore]);

}

} else if ($chiave == null) {

$this->alunni = array();

} else {

unset($this->alunni[$chiave]);

}

}

}

Non appena entriamo nel metodo removeXXX viene controllato se il parametro $chiave è un array. in caso affermativo cicliamo su quest’ultimo, ed eliminiamo tutti gli elementi alle posizioni corrispondenti ai valori contenuti nel parametro del metodo.

Nel caso $chiave non sia un array ed sia uguale a null resetteremo la proprietà $alunni.

Infine l’ultimo caso è se il parametro $chiave è valorizzato; in tal caso elimineremo il valore corrispondente alla posizione $chiave nella proprietà $alunni della classe.

Metodo getXXX

Per recuperare degli elementi da una proprietà composta utilizzeremo un metodo con la seguente signature:

public function getXXX($chiave=null)

Dove XXX deve essere sostituito con il nome della proprietà.

Di seguito è fornito un esempio:

class Classe {

private $alunni;

public function getAlunni($chiave=null) {

if (is_array($chiave)) {

$elementi = array();

foreach($chiave as $posizione=> $valore){

$elementi[$valore] = $this->alunni[$valore];

}

return $elementi;

} else if ($chiave == null) {

return $this->alunni;

}

return $this->alunni[$chiave];

}

}

Non appena entriamo nel metodo getXXX viene controllato se il parametro $chiave è un array. in caso affermativo cicliamo su quest’ultimo, ed alla fine ritorniamo un array contenente i valori degli elementi richiesti.

Nel caso $chiave non sia un array ed sia uguale a null restituiremo tutta la proprietà $alunni.

Infine l’ultimo caso corrisponde al parametro $chiave valorizzato; in tal caso restituiremo il valore corrispondente alla posizione $chiave nella proprietà $alunni della classe.

Chiudiamo la lezione assemblando tutto il codice finora scritto e applicandolo ad un piccolo esempio, chiarificatore:

  1. Nessun commento ancora...
  1. Nessun trackback ancora...