Ieri ho cercato di realizzare multipli cicli for all’interno di una classe.
@vincenzodifranco3 #php #attributi #attributi_variabili ♬ Shakira: Bzrp Music Sessions, Vol. 53 – Bizarrap & Shakira
In questo caso vorrei mostrare un esempio di come usare le variabili per gli attributi di una classe.
public function condizioni($prodotti_listino, $prodotto, $listino){
if ($prodotto['listino'] ==$listino){
array_push($this->{$prodotti_listino}, $prodotto);
}
}
Per poter testare il codice ho utilizzato un servizio on line.
In questo esempio ho in un primo momento realizzato una funzione per la generazione random di array.
public function create_random_array(){
// inizializzo array
$array = [];
// per i che va da 0 a 20, 20 escluso
for ($i = 0; $i < 20; $i++) {
// creo l'elemento dell'array
$el = [
'sku'=>$this->random(),
'listino'=>$this->random_property()
];
// aggiungo l'elemento all'array inizializzato
array_push($array, $el);
}
return $array;
}
La funzione random array fa utilizzo di altre due funzioni random() e random_property.
public function random_property(){
$codice_listino = ['a','b','c', 'd'];
return $codice_listino[rand(0, count($codice_listino)-1)];
}
public function random(){
$characters = 'BCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 6; $i++) {
$randstring .= $characters[rand(0, strlen($characters))];
}
return $randstring;
}
Queste due funzioni non fanno altro che creare in maniera random un array di test che successivamente andremo ad ordinare.
public function suddividi_per_listino(){
// per ogni prodotto
foreach($this -> array_random as $prodotto){
if ($prodotto['listino'] =='a'){
array_push($this->prodotti_listino_a, $prodotto);
}
if ($prodotto['listino'] =='b'){
array_push($this->prodotti_listino_b, $prodotto);
}
if ($prodotto['listino'] =='c'){
array_push($this->prodotti_listino_c, $prodotto);
}
if ($prodotto['listino'] =='d'){
array_push($this->prodotti_listino_d, $prodotto);
}
}
}
In un primo momento ho realizzato una funzione che non fa uso degli attributi variabili, che come potete vedere, ripete il codice 4 volte.
public function suddividi_per_listino_variabili(){
foreach($this -> array_random as $prodotto){
$this -> condizioni('prodotti_listino_a', $prodotto, 'a');
$this -> condizioni('prodotti_listino_b', $prodotto, 'b');
$this -> condizioni('prodotti_listino_c', $prodotto, 'c');
$this -> condizioni('prodotti_listino_d', $prodotto, 'd');
}
$this -> mostra_risultati();
}
utilizzando la funzione condizioni che fa appunto uso degli attributi variabili ho ottenuto un codice maggiormente modificabile, in quanto la funzione condizione è una sola e la posso modificare.
public function suddividi_per_listino_v2(){
$listini = ['a','b','c','d'];
foreach($this -> array_random as $prodotto){
foreach($listini as $l){
$this -> condizioni('prodotti_listino_'.$l, $prodotto, $l);
$this -> mostra_risultati();
}
}
}
in questa versione del codice ho inserito un secondo ciclo foreach per generare dinamicamente il nome del variabile attraverso l’uso del operatore . di concatenazione.