PHP, OOP, magic method e costruttori

Articoli precedenti su tema OOP:

https://umbriawayinfo.wordpress.com/2019/04/07/programmazione-procedurale-oppure-oop-this-is-the-problem/

https://umbriawaypotenzia.wordpress.com/2019/04/07/php-versione-sette-introdotte-nuove-direttive-per-trasformare-il-linguaggio-in-fortemente-tipicizzato/

https://umbriawaysemplifica.wordpress.com/2019/04/08/ambito-di-visibilita-delle-variabili-in-php-public-protected-private/

web developer umbriaVediamo adesso esempi visti negli articoli precedenti dove è palese che la definizione delle proprietà viene richiesta all’ utente ma che fare quando vogliamo ottenere un oggetto compiuto che abbia al suo interno già le proprietà inizializzate e definite con dei valori senza dover accedere all’interno della classe e settare queste variabili? Si ricorre ai metodi magici di PHP che iniziano con __ (due volte underscore) in questo caso scomodiamo il metodo COSTRUTTORE. Senza il costruttore dobbiamo andare noi a definire i valori delle proprietà di volta in volta, con quelle ambiguità legate alla visibilità delle variabili che possono indurci all’ errore senza l’uso della parola chiave THIS che fa riferimento all’ oggetto corrente quando non abbiamo a che fare con PUBLIC:

/*
<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
public $quantita;

}

output indirizzo: https://www.farwebdesign.com/PHPOOP/9/index.php

<?php
require_once “classi/Libro.php”;

$nlibro = new Libro();
var_dump($nlibro);
$nlibro->titolo = ‘Sandokan’;
$nlibro->autore = ‘Salgari’;
$nlibro->codiceisbn = ‘123ASWE’;
$nlibro->qta = 10;
echo “<br>”;
var_dump($nlibro);

*/

mentre con il costruttore caratterizzata dalla sintassi public function __construct($tit,$aut,$cod,$qta=1) ci accingiamo a creare un oggetto completo che ha le sue proprietà inizializzate e definite, senza dover intervenire in corsa:

/*

<?php
class Libro {
public $titolo;
public $autore;
public $codiceisbn;
public $prezzo;
public $quantita;
public function __construct($tit,$aut,$cod,$qta=1) {
$this-> titolo = $tit;
$this-> autore = $aut;
$this-> codiceisbn = $cod;
$this-> quantita = $qta;
}
public function getTitolo() {
return $this->titolo;
}
}

output con index1.php indirizzo https://www.farwebdesign.com/PHPOOP/9/index1.php, da notare il Sandokan finale dovuto alla stampa dell’ istruzione:
echo $nlibro->getTitolo();

<?php
require_once “classi/Libro1.php”;

$nlibro = new Libro(‘Sandokan’,’Salgari’, ‘1234ASB’);
var_dump($nlibro); //il var_dump è una funzione che stampa il tipo di dati
echo “<br>”;
echo $nlibro->getTitolo();

*/

Con new creiamo una istanza della classe, ma questo sistema non ci fa inizalizzare tutte le proprietà del nostro oggetto e i valori delle variabili devono venire precisati dopo, mentre con l’introduzione del costruttore creo un oggetto già personalizzato sulla base dei parametri che gli vado a passare. Dopo la parola NEW, il metodo costruttore forgia il nostro oggetto inserendo dei valori, ne consegue che questo metodo NON PUO’ RESTITUIRE DEI VALORI perchè non fa altro che dare forma compiuta al nostro oggetto con dei valori assegnati alle proprietà. Il costruttore che è la prima funzione che viene richiamata in una classe inizializza tutte le nostre variabili in una sola stringa. A questo punto non ci resta che perfezionare la nostra classe libro anche in ambito sicurezza, ciò verrà affrontato in una delle prossime puntate!

Annunci

Crea un sito o un blog gratuitamente presso WordPress.com.

Su ↑