Guida Funzioni
PHP Manual

Funzioni per Classi/Oggetti

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 di 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.

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->Ortaggiotrue"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

Indice dei contenuti


Guida Funzioni
PHP Manual