Queste funzioni permettono di ottenere informazioni sulle classi e sulle istanze degli oggetti. Si può ricavare il nome della classe da cui deriva un dato oggetto, come le sue proprietà e i suoi metodi. Utilizzando queste funzioni si ottiene, non solo a quale classe appartiene un dato oggetto, ma anche i suoi "padri" (ad esempio da quale classe è derivata la classe dell'oggetto).
Non sono necessarie librerie esterne per utilizzare questo modulo.
Non è necessaria nessuna installazione per usare queste funzioni, esse fanno parte del core di PHP.
Questa estensione non definisce alcuna direttiva di configurazione in php.ini
Questa estensione non definisce alcun tipo di risorsa.
Questa estensione non definisce alcuna costante.
In questo esempio, prima si definisce una classe base, quindi una seconda che deriva dalla prima. La classe base descrive gli aspetti generali degli ortaggi, se è commestibile e quale sia il colore. La classe derivata Spinaci aggiunge i metodi di cottura e di verifica della completa cottura.
Example#1 classi.inc
<?php
// classe base con proprietà e metodi
class Ortaggio {
var $commestibile;
var $colore;
function Ortaggio($commestibile, $colore="verde")
{
$this->commestibile = $commestibile;
$this->colore = $colore;
}
function e_commestibile()
{
return $this->commestibile;
}
function che_colore_ha()
{
return $this->colore;
}
} // Fine della classe ortaggio
// Estensione della classe base
class Spinaci extends Ortaggio {
var $cotto = false;
function Spinaci()
{
$this->Ortaggio( true, "verde" );
}
function cuocilo()
{
$this->cotto = true;
}
function e_cotto()
{
return $this->cotto;
}
} // Fine della classe spinaci
?>
A questo punto si istanziano 2 oggetti a partire da queste classi e si visualizzeranno le informazioni relative a questi oggetti, compresi i loro padri. Verranno anche inserite funzioni di utilità principalmente con lo scopo di rendere chiara la visualizzazione delle variabili.
Example#2 test_script.php
<pre>
<?php
include "classi.inc";
// Funzioni di utilità
function visualizza_var($oggetto)
{
$matrice = get_object_vars($oggetto);
while (list($prop, $val) = each($matrice))
echo "\t$prop = $val\n";
}
function visualizza_metodi($oggetto)
{
$matrice = get_class_methods(get_class($oggetto));
foreach ($matrice as $metodo)
echo "\tfunzione $metodo()\n";
}
function padri_classe($oggetto, $classe)
{
if (is_subclass_of($$oggetto, $classe)) {
echo "Oggetto $oggetto appartiene alla classe ".get_class($$oggetto);
echo " derivata da $classe\n";
} else {
echo "Oggetto $oggetto non deriva da una sottoclasse di $classe\n";
}
}
// Istanzia 2 oggetti
$pomodoro = new Ortaggio(true,"rosso");
$frondoso = new Spinaci();
// Visualizza le informazioni sugli oggetti
echo "pomodoro: CLASSE " . get_class($pomodoro) . "\n";
echo "frondoso: CLASSE " . get_class($frondoso);
echo ", PADRE " . get_parent_class($frondoso) . "\n";
// visualizza le proprietà di pomodoro
echo "\npomodoro: Proprietà\n";
visualizza_var($pomodoro);
// e i metodi di frondoso
echo "\nfrondoso: Metodi\n";
visualizza_metodi($frondoso);
echo "\nPadri:\n";
padri_classe("frondoso", "Spinaci");
padri_classe("frondoso", "Ortaggio");
?>
</pre>
Un aspetto da notare nell'esempio precedente è che l'oggetto $frondoso è un'istanza della classe Spinaci che a sua volta è una sottoclasse di Ortaggio, quindi l'ultima parte dell'esempio visualizzerà:
[...] Padri: Oggetto frondoso non deriva da una sottoclasse di Spinaci Oggetto frondoso appartiene alla classe spinaci derivata da Ortaggio