Programmazione ad oggetti in PHP: parte 4

PHP Object-oriented programming part 4

In questa quarta parte della mini serie di tutorial riguardanti la programmazione ad oggetti in Php andremo a vedere un esempio che riassumerà gli argomenti trattati nei 3 articoli precedenti.
In seguito linkiamo i precedenti tutorial:

Il tema dell’esempio sarà centrato sulle operazioni CRUD. CRUD è l’acronimo di Create, Read, Update e Delete, esse sono semplicemente le quattro operazioni che si eseguono sulle strutture dati come file CSV,  Json oppure sui database. Le operazioni CRUD rappresentano la creazione di dati, la loro lettura, la loro modifica e la loro cancellazione. Nel nostro esempio useremo una struttura in Json visto che nelle puntate precedenti non abbiamo parlato dei database.

La struttura dati

Per iniziare dobbiamo procurarci dei dati fake da manipolare, e sul web ci sono molti siti che mettono a disposizione delle strutture inventate già pronte per essere usate, uno di questi siti è https://www.mockaroo.com. Qui possiamo trovare parecchio materiale che può fare al caso nostro.

sito molare.com
Figura1. Schermata mokaroo.com

In Figura 1 possiamo vedere la pagina iniziale del sito, dove ci presenta una struttura iniziale che possiamo modificare. vediamo ora alcuni punti per personalizzare i dati che ci servono.

  1. Trascinando i sei punti possiamo cambiare l’ordine dei fields. Nella casella a fianco ai sei punti possiamo cambiare il nome del dato.
  2. Premendo il drop down al punto n 2 possiamo cambiare il tipo di dato.
  3. Premendo la x cancelliamo il fields.
  4. Nella casella Rows possiamo cambiare il numero di righe.
  5. Nella casella format possiamo cambiare il formato del file generato.

Apportiamo qualche modifica allo schema cambiando il nome dell’ultimo field da IP_ADDRESS a image, modifichiamo in Dummy image URL, modifichiamo il campoRows da 1000 a 10, e infine modifichiamo il campo Format da CSV a Json. Adesso siamo pronti a scaricare i dati premendo il bottone verde in basso GENERATE DATA(Figura 2).

Dati modificati
Figura 2.

Fatto click sul bottone si avvierà il download di un file json chiamato MOCK_DATA.json, con i dei dati inventati e strutturati come abbiamo chiesto.

La struttura del progetto

Adesso andremo a creare il progetto con i vari file e le varie sottocartelle che ci serviranno a dar vita al nostro esempio. Per prima cosa creiamo la cartella principale, la metteremo in un punto a piacere del nostro pc che può essere ad esempio nel desktop e che potremmo chiamare ad esempio gestione_utenti. All’interno di essa creiamo sei altre cartelle che chiameremo rispettivamente public, class, function, css, js e json. Forse in questo caso non le useremo tutte, ma intanto le facciamo comunque. nella cartella json andremo a copiarvi dentro il file scaricato in precedenza che ha nome MOCK_DATA.json. Apriamo ora la cartella public e vi creiamo dentro un file che chiameremo index.php. Nella cartella css andremo a creare un file chiamato style.css che può sempre venir comodo.
Per il momento possiamo sospendere la creazione della struttura e andare avanti a sviluppare un po’ di codice. Prima però, siccome anche l’occhio vuole la sua parte, andiamo ad importarvi un framework per la creazione di interfacce grafiche web, tanto per abbellire un po’ le nostre pagine, il primo che ci viene in mente è Bootstrap, che e’ un ottimo strumento di sviluppo tra i più usati se non forse il più usato al mondo, ricco di funzionalità e tools per generare ogni tipo di layout che si voglia realizzare. Però a pensarci bene noi non vogliamo parlare di una cosa di cui tutti parlano già, quindi accantoniamo l’idea di Bootstrap e andremo invece ad usare il piccolo ma versatile Skeleton css, composto solamente da due file css e tolti i commenti da neanche 200 righe di codice in totale. Lo possiamo scaricare qui.

Figura 3. Pagina web Skeleton css

In Figura 3 possiamo vedere la pagina principale (ed unica) del sito di Skeleton css che oltre dal presentazione funge anche da manuale. Cliccando il bottone azzurro download possiamo scaricare il ‘miniframework’ di cui prenderemo solamente due file css, chiamati normalize.css e skeleton.css, che andremo a copiare nel nostro progetto, nella cartella css. Ora apriamo il file index.php e vi inseriamo il seguente codice.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Gestione utenti</title>
  <meta name="description" content="">
  <meta name="author" content="">


  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">


  <link rel="stylesheet" href="../css/normalize.css">
  <link rel="stylesheet" href="../css/skeleton.css">
  <link rel="stylesheet" href="../css/style.css">

  <!-- <link rel="icon" type="image/png" href="images/favicon.png"> -->

</head>
<body>
  <div class="container">
    <div class="row">
      <div class="one-half column" style="margin-top: 25%">
       <h1>Gestione utenti</h1>
       
      </div>
    </div>
  </div>
</body>
</html>

Let’s begin

Ora possiamo dedicarci alla realizzazione del programmino. Andiamo nella cartella class e creiamo due file che chiameremo uno User.php e l’altro ManageUsers.php, in questi file andremo a costruirvi dentro delle classi. Partiamo subito con User.php. In questo file creeremo una classe di nome User che servirà a raggruppare tutti i dati di ogni singolo utente in un oggetto sotto forma di proprietà che andremo a gestire con gli appositi metodi getter e setter. Adesso diamo un’occhiata al file MOCK_DATA.json(Figura 4.).

Figura 4.

Prendiamo ora le chiavi dei valori di un oggetto che sono id, first_name, last_name, email, gender e image e le usiamo come proprietà nella classe User che andremo a creare nel file User.php

<?php
class User{

    /*
    * Definisco le proprieta' 
    */
    private $id;
    private $firstName;
    private $lastName;
    private $email;
    private $gender;
    private $image;

    /*
    * Creo il costruttore
    */
    public function __construct($id, $firstName, $lastName, $email, $gender, $image)
    {
        $this->id = $id;
        $this->firstName = $firstName;
        $this->lastName = $lastName;
        $this->email = $email;
        $this->gender = $gender;
        $this->image = $image;
    }

    /*
    * Creo i metodi getter
    */

    public function getId()
    {
        return $this->id;
    }

    public function getFirstName()
    {
        return $this->firstName;
    }

    public function getLastName()
    {
        return $this->lastName;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function getGender()
    {
        return $this->gender;
    }

    public function getImage()
    {
        return $this->image;
    }

    /*
    * Creo i metodi setter 
    */

    public function setId($valore)
    {
        $this->id = $valore;
    }

    public function setFirstName($valore)
    {
        $this->firstName = $valore;
    }

    public function setLastName($valore)
    {
        $this->lastName = $valore;
    }

    public function setEmail($valore)
    {
        $this->email = $valore;
    }

    public function setGender($valore)
    {
        $this->gender = $valore;
    }

    public function setImage($valore)
    {
        $this->image = $valore;
    }
}

Ecco creata la nostra bellissima classe User, dove abbiamo definito delle proprietà con l’ambito di visibilità impostato a private, così per aver un maggior controllo sulle variabili e di conseguenza una minor probabilità di errore. Abbiamo creato poi il costruttore e impostato i metodi getter e setter. Adesso apriamo il file attualmente ancora vuoto ManageUsers.php e vi creiamo dentro la classe ManageUsers. In questa classe andremo a mettere tutti i metodi che serviranno a gestire il programma.

<?php
require_once "User.php";

class ManageUsers{

  private $user;
  private $dataUsersToArray;

  /*
  * Path del file json
  *
  */
  private function pathFile():string
  {
    return $path = "../json/MOCK_DATA.json";
  }

  /*
  * Apro il file json
  * Converto il json in un array
  */
  public function listOfUsers()
  {
    
    // Verifico se il file esiste
    if(!file_exists($this->pathFile())){
        return [];
    }

    $dataUsers = file_get_contents($this->pathFile(), true);
    $dataUsersToArray = json_decode($dataUsers, true);
    
    return $dataUsersToArray;

  }

  /*
  * Creo un oggetto per ogni utente con tutte le sue proprieta'
  * Inserisco tutti gli oggetti in un array
  */
  public function createUser()
  {
    // Creo un array che conterra' tutti gli oggetti, uno per ogni utente
    $user = [];
    foreach ($this->listOfUsers() as $key => $value) {

        $user[] = new User($this->listOfUsers()[$key]['id'],
                         $this->listOfUsers()[$key]['first_name'],
                         $this->listOfUsers()[$key]['last_name'],
                         $this->listOfUsers()[$key]['email'],
                         $this->listOfUsers()[$key]['gender'],
                         $this->listOfUsers()[$key]['image']
                        );

    }
  
    return $user;

  }

}

Adesso andiamo a modificare il file index.php come segue.

<?php
require_once "../class/ManageUsers.php";
$manageUsers = new ManageUsers();
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Gestione utenti</title>
  <meta name="description" content="">
  <meta name="author" content="">


  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="//fonts.googleapis.com/css?family=Raleway:400,300,600" rel="stylesheet" type="text/css">


  <link rel="stylesheet" href="../css/normalize.css">
  <link rel="stylesheet" href="../css/skeleton.css">
  <link rel="stylesheet" href="../css/style.css">

  <!-- <link rel="icon" type="image/png" href="images/favicon.png"> -->

</head>
<body>
  <div class="container">
    <div class="row">
      <div class="one-half column" style="margin-top: 25%">
       <h1>Gestione utenti</h1>
       
        <?php
         
          for ($i = 0; $i createUser()); $i++) {
            echo "First name: <b>" . $manageUsers->createUser()[$i]->getFirstName() . "</b><br>";
            echo "Last name:  <b>" . $manageUsers->createUser()[$i]->getLastName() . "</b>><br>";
            echo "<hr>";
          }
        ?>
       
      </div>
    </div>
  </div>
</body>
</html>

Se ora andiamo a testare il programma vediamo il risultato come segue in Figura 5.

Figura 5.

In questo esempio abbiamo visto come mostra gli utenti, nei prossimi articoli vedremo come fare anche le operazioni di modifica, cancellazione e creazione.

 

SviluppoMania
Stay Tuned

MARCO.VERGNANI

Nella mia vita a 12 anni e' entrato a far parte un Intel 80286 con 4MB di RAM, un Hard disk da 20 MB e una primissima scheda VGA appena uscita e da allora mi si e' aperto un mondo pieno di bit. Appassionato di programmazione fin da piccolo, mi diverto a costruire piccoli robottini. Curioso delle molteplici applicazioni che le macchine automatiche possono compiere, e adoro vedere volare quegli strani oggetti chiamati droni.

Articoli correlati

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.