abstract class Person { protected $sex ; }
interface ChildProducer { /* Person */ function produceChild() ; }
interface Fucker extends ChildProducer { function acceptFuckable($fuckable) ; }
interface Fuckable extends ChildProducer { function acceptFucker($fucker) ; }
class MalePerson implements Fucker { }
class FemalePerson implements Fuckable { }
$male = new MalePerson() ;
$male -> acceptFuckable(new FemalePerson()) ;
print_t($male -> produceChild()) ; // instanceof Person, their child