Introduzione
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).
Requisiti
Non sono necessarie librerie esterne per utilizzare questo modulo.
Installazione
Non è necessaria nessuna installazione per usare queste
funzioni, esse fanno parte del core di PHP.
Configurazione Runtime
Questa estensione non definisce
alcuna direttiva di configurazione in php.ini
Tipi di risorse
Questa estensione non definisce alcun tipo di risorsa.
Costanti Predefinite
Questa estensione non definisce alcuna costante.
Esempi
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.
Esempio 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.
Esempio 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) {
global $$oggetto;
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à: