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.
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) { 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 |
|