PHP 5 allows you restrict variables to complex types

<?php
interface pump {
    function 
get_gas();
}

class 
premium implements pump {
    function 
get_gas() {
        echo 
"chug..chug..chug!\n<br />\n";
    }
}

class 
regular implements pump {
    function 
get_gas() {
        echo 
"chug..cough..chug..\n<br />\n";
    }
}

class 
mercedes {
    function 
infuse_gas(premium $pump) {
        echo 
"mercedes: ";
        
$pump->get_gas();
    }
}

class 
pinto {
    function 
infuse_gas(pump $pump) {
        echo 
"pinto: ";
        
$pump->get_gas();
    }
}

$pinto = new pinto;
$pinto->infuse_gas(new premium);
$pinto->infuse_gas(new regular);

$mercedes = new mercedes;
$mercedes->infuse_gas(new premium);
$mercedes->infuse_gas(new regular);
?>
Output
pinto: chug..chug..chug!
pinto: chug..cough..chug..
mercedes: chug..chug..chug!