Pubblico o privato? Questo non é un film sugli enti dislocati sulla penisola, ma OOP e PHP!

All’ indirizzo https://umbriawayincrementa.wordpress.com/2020/04/21/visibilita-pubblica-o-privata-della-classe-php-oop-senza-segreti-quinta-puntata/ abbiamo iniziato nella quinta puntata di OOP ad approfondire il discorso del pubblico e del privato non certo riferito agli enti presenti sul territorio italiano. In questo sesto appuntamento didattico ci sorge spontanea una domnanda: conviene lavorare con proprietà accessibili tramite metodi privati nella nostra classe senza offrire il fianco a intrusioni esterne nella classe con variabili di tipo pubbliche? Certamente, alla classe viene garantita un minimo di sicurezza. Per leggere delle proprietà definite come private sono necessariamente usati metodi che leggono queste variabili esclusive. Vediamo un esempio pratico tratto dalla nostra classe gm (Grande Maestro). Se volessi mettere in piedi un controllo sul nom nome digitato, ossia voglio che almeno venga scritto un nome che abbiam minimo una Maiuscola e minimo una minuscola e voglio reiterare questa operazione definendo uno spazio e consentendo una ripetizione della stringa, usando una espressione regolare del tipo return preg_match(“/^[A-Z][a-z]+(\s[A-Z][a-z]+)*$/”, $n); potrei farlo tranquillamente, a quel punto potrei fare una funzione (nella definizione accademica delle classi sinonimo di metodi) che chiamerò CONTROLLO e che accetta un parametro in ingresso che non è altro che il parametro che deve analizzare e alla fine restituire grazie alla parola chiave RETURN. A questo punto potrei inserire questa funzione di controllo all’ interno di una funzione di impostazione del nome in cui con una semplice istruzione condizionale dico: se il nome risponde ai requisiti dell’ espressione regolare, il nome viene accettato e fai quello che devi fare, altrimenti in caso contrario, il nome non viene accettato e non eseguire ulteriori istruzioni (ricordiamoci che il computer è stupido, esegue meccanicamente gli ordini che gli vengono impartiti!).

class gm
{
private $nome;

function setNome($n)
{
if ($this->controllo($n))
{
$this->nome=$n;
echo “nome accettato<br>”;
}
else
echo “nome riufiutato<br>”;
}

private function controllo($n)
{
return preg_match(“/^[A-Z][a-z]+(\s[A-Z][a-z]+)*$/”, $n);
}
}

$sempronio= new gm();
$sempronio->setNome(“Paolo Emilio”);

var_dump($sempronio);

 

A video su http://phptester.net/ vedrò il risultato ossia:

nome accettato
object(gm)#1 (1) { [“nome”:”gm”:private]=> string(12) “Paolo Emilio” }

 

Il primo esperimento da fare è intanto vedere scrivendo alla fine $sempronio->setNome(“Paolo Emilio”); con Paolo minuscolo come prima lettera e vedere l’effetto che fa, ovviamente vedrò a video la dicitura “nome rifiutato” perchè siamo finiti nel flusso dell’ else nella nostra funzione setNome. In secondo luogo sulla visibilità dei metodi della classe potrei fare un esperimento che succederebbe se tentassi di accedere direttamente alla funzione controllo dall’ esterno senza richiamare il metodo setNome che abbiamo definito all’ interno della classe per leggere correttamente i dati? Nella domanda è già insita una risposta vediamo quindi l’effetto che fa aggiungendo a tutto il codice precedente l’istruzione finale $tizio->controllo(“Paolo Emilio”); a video comparirà come per magia il messaggio seguente:

FATAL ERROR Uncaught Error: Call to a member function controllo() on null in /home4/phptest/public_html/code.php70(5) : eval()’d code:29 Stack trace: #0 /home4/phptest/public_html/code.php70(5): eval() #1 {main} thrown on line number 29

 

succede che non si riuscirebbe ad accedere direttamente al metodo semplicemente perchè l’avventuriero non troverebbe all’ interno della definizione della classe proprietà (sinonimo di variabili che hanno dei valori) di tipo pubbliche. Quindi è decisamente buona prassi di programmazione costruire il proprio software con i metodi definiti come PRIVATE!

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo:
close-alt close collapse comment ellipsis expand gallery heart lock menu next pinned previous reply search share star