codice:
<?php // 5
interface FiguraGeometrica {
    public function Area();    
}

class Cerchio implements FiguraGeometrica {
    public function __construct( $raggio ){
        $this->raggio = &$raggio;
    }
    public function Area() {
        return ( 3.14 * $this->raggio * $this->raggio );
    }
    private $raggio;
}

class Quadrato implements FiguraGeometrica {
    public function Area() {
        return ( $this->lato * $this->lato );
    }
    private $lato;
}



$miaFigura = &new Cerchio( 10 );
echo $miaFigura->Area().'<hr />';
if( is_a( $miaFigura, 'Cerchio' ) ) {
    echo 'OK
';
}
if( is_a( $miaFigura, 'FiguraGeometrica' ) ) {
    echo 'OK
';
}
?>


[editato]
dimenticavo, per i tipi di dato in PHP4 come in PHP5 ci sono varie soluzioni, una tra queste:

http://www.devpro.it/php5_id_42.html

[rieditato]
... che sto' per aggiornare perche' in RC1 andava ma ora mi sono accorto che non andava

cmq sia, altro esempio
codice:
require( 'TypeHints.class.php' );

interface FiguraGeometrica {
    public function Area();    
}

class Cerchio implements FiguraGeometrica {
    public function __construct( Float &$raggio ){
        $this->raggio = &$raggio->value;
    }
    public function Area() {
        return new Float( 3.14 * $this->raggio * $this->raggio );
    }
    private $raggio;
}

class Quadrato implements FiguraGeometrica {
    public function __construct( Float &$lato ){
        $this->lato = &$lato->value;
    }
    public function Area() {
        return new Float( $this->lato * $this->lato );
    }
    private $lato;
}

$miaFigura = &new Cerchio( new Float( 10 ) );
echo $miaFigura->Area()->value.'<hr />';
if( is_a( $miaFigura, 'Cerchio' ) ) {
    echo 'OK
';
}
if( is_a( $miaFigura, 'FiguraGeometrica' ) ) {
    echo 'OK
';
}