<?php
interface A_inner_i { public function bar(); }
class A_inner implements A_inner_i { public function bar() {} }
abstract class B_inner_i { public abstract function bar(); }
class B_inner extends B_inner_i { public function bar() { 1+1; } }
class B { public function foo(B_inner_i $b) { $b->bar(); } }
$b = new B();
$b_inner = new B_inner();
$b->foo($b_inner);