PHP fornisce un insieme di costanti predefinite e metodi magici per i nostri programmi. A differenza delle normali costanti i quali si impostano con define()
, il valore delle costanti predefinite o speciali dipendono da dove vengono utilizzati nel codice e sono utilizzati per accedere a informazioni di sola lettura sul proprio codice PHP. I metodi magici sono metodi riservati che si possono utilizzare nelle classi per agganciare una particolare funzionalità di PHP.
Se non avete ancora sentito parlare di metodi magici in PHP e costanti speciali, allora questo articolo fa per voi! Ho una raccolta di quelli più utili e come è possibile utilizzarle nel codice. Provo a condividerlo.
Costanti predefinite
__LINE__
e __FILE__
per esempio. Ecco alcune delle costanti utili che vengono messe a disposizione da PHP:
__LINE__
restituisce il numero di riga del file dove appare la costante
<?php echo "linea num.: " . __LINE__; // linea num.: 3 echo "linea num.: " . __LINE__; // linea num.: 4 echo "linea num.: " . __LINE__; // linea num.: 5 ?>
__FILE__
rappresenta il nome del file, compreso il suo percorso completo<?php // presumendo che questo file si chiami index.php echo "la directory e il nome del file è: " . __FILE__; // stampa ... // la directory e il nome del file è: C:\usr\www\index.php ?>
__DIR__
rappresenta solo il percorso del file<?php echo "la directory di questo file è: " . __DIR__; // stampa ... // la directory di questo file è: C:\usr\www ?>
__CLASS__
restituisce il nome della classe corrente<?php class Esempio { public function __construct() { echo __CLASS__; } } $obj = new Esempio(); // stampa Esempio ?>
__FUNCTION__
restituisce il nome della funzione corrente<?php function miaFunzione() { echo "il nome della funzione è: " . __FUNCTION__; } miaFunzione(); // il nome della funzione è: miaFunzione ?> </pre> <code>__METHOD__</code> rappresenta il nome del metodo corrente <pre class="brush: php; title: ; notranslate" title=""> <?php class Esempio { public static function mioMetodo() { echo "il nome del metodo è: " . __METHOD__; } } Esempio::mioMetodo(); // il nome del metodo è: mioMetodo ?>
__NAMESPACE__
rappresenta il nome dello spazio di nomi corrente<?php namespace mioNameSpace; echo "lo spazio di nomi è: " . __NAMESPACE__; // o spazio di nomi è: mioNameSpace ?>
__construct()
e __destruct()
.__construct()
è il metodo magico che PHP invoca per creare istanze di oggetti di classe. Accetta qualsiasi numero di argomenti.<?php class MioEsempio { public function __construct($foo) { echo "Il costruttore di " . __CLASS__; echo " è stato invocato con " . $foo; } } $obj = new MioEsempio(69); // Il costruttore di MioEsempio è stato invocato con 69 ?>
__destruct()
viene chiamato quando l’oggetto viene distrutto dal Garbage Collector di PHP. Non accetta argomenti ed è comunemente usato per eseguire operazioni di pulizia che possono essere necessari come nella chiusura di una connessione al database.<?php class MioEsempio { public function __destruct() { echo "Il distruttore della classe "; echo __CLASS__ . " è stato invocato."; } } $obj = new MioEsempio; // Il distruttore della classe MioEsempio è stato invocato. ?>
PHP invoca il metodo
__get()
, se una proprietà è indefinita (o inaccessibili) in un contesto getter. Il metodo accetta come argomento il nome della proprietà. Dovrebbe restituire il valore che viene considerato come valore della proprietà.Il metodo
__set()
viene chiamato per le proprietà non definite in un contesto setter. Esso accetta due argomenti, il nome della proprietà e un valore.<?php class MioEsempio { private $mioArray = array(); public function __set($prop, $valore) { $this->mioArray[$prop] = $valore; } public function __get($prop) { return $this->mioArray[$prop]; } public function __isset($prop) { return isset($this->mioArray[$prop]); } public function __unset($prop) { unset($this->mioArray[$prop]); } public function __toString() { return __CLASS__ . ":" . $this->nome; } } $obj = new MioEsempio(); if (!isset($obj->nome)) { $obj->name = "Pluto"; } echo $obj->nome; // Pluto echo $obj; // MioEsempio:Pluto ?>
nome
non è definita nella classe. Quando si tenta di assegnare il valore in “MioEsempio”, PHP invoca il metodo magico __set()
. Riceve “nome” come argomento di $prop
e “Pluto” come $valore
, per conservare il valore nella matrice privata $mioArray
. Il metodo __get()
funziona in modo simile, quando si esegue l’output di $obj->name
, viene chiamato il metodo __get()
e “nome” viene passato come argomento di $prop
.Ci sono altri metodi magici che ci aiutano con il recupero e il controllo di variabili membro inaccessibili come appare nel codice di esempio:
__isset()
, __unset()
, e __toString()
. Sia __isset()
e __unset()
vengono attivate dalle funzioni con lo stesso nome (senza l’underscore) in PHP.__isset()
controlla se la proprietà è impostata o meno, e accetta un argomento che è la proprietà che vogliamo testare. __unset()
riceve un argomento che è il nome della proprietà che si vuole disinserire o eliminare.In molti casi, rappresentare un oggetto come una stringa è utile, ad esempio per l’output di un utente o per un altro processo. Normalmente PHP li presenta con un ID nella memoria, che per noi non è facile arrivarci. Il metodo
__toString()
ci aiuta a rappresentare l’oggetto come una stringa. Il metodo viene attivato in qualsiasi situazione in cui viene usato l’oggetto come una stringa, ad esempio: echo "Ciao $obj";
. Può anche essere chiamato direttamente come qualsiasi altro metodo pubblico, per esempio, come aggiungere una stringa vuota per forzare la coercizione.
JQuery ⊚
jQuery stà diventando rapidamente uno strumento che ogni sviluppatore web di interfacce dovrebbe conoscere. Lo scopo di questo libro è di fornire una panoramica della biblioteca, in modo che qu…[/content_box] [content_box]

Zend ⊚
Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller). Cosa è lo Zend Framework? Framework per la costruzione di siti web più veloci e …[/content_box] [content_box]
Python ⊚
Python para todos è un libro sulla programmazione in Python. Questo è un tutoriale su Python adatto a tutti i livelli e si può scaricare in pdf gratuitamente in spagnolo. Il tutoriale di Python…[/content_box] [content_box]
JQuery ⊚
In questo articolo ci concentreremo sui nuovi metodi nella versione 1.6 della libreria jQuery JavaScript, così come i cambiamenti ai metodi già esistenti. Le informazioni fornite sono solo un riassunto veloce, raccomando u…[/content_box] [content_box]
Java ⊚
Un metodo overload viene utilizzato per riutilizzare il nome di un metodo ma con argomenti diversi, opzionalmente con un differente tipo di ritorno. ”””Regole””