Я понял что ты имел ввиду. Ты хочешь кастовать, да?.
Но какой у этого смысл, если ты работаешь с объектом интерфейс которого тебе известен?
... function blah(Interface $object) ... <--- зачем здесь использовать методы которые не предусмотрены интерфейсом?
Хочешь защититься от дурака -- самого себя? Не стоит так упорно сосать пальцы, иначе высосешь проблемы и посерьезнее. А если ты гуру "других языков", то может быть php тебе и не нужен? Знаешь один, и достаточно. Зачем второй, если там все не так как в первом?
P.S. Некоторые "базовые вещи других языков" действительно становятся в php не понятными, так как теряют смысл. Так же как базовые вещи php в других языках..
Можно сделать и так:
PHP:
<?php
interface Base
{
public function hello();
}
class Reference
{
public function __construct($interface, $instance)
{
if (interface_exists($interface) && is_object($instance))
{
$this->method = get_class_methods($interface);
$this->instance = $instance;
$this->interface = $interface;
}
else
{
throw new RuntimeException();
}
}
public function __call($method, $arguments)
{
if (in_array($method, $this->method))
{
call_user_func_array(array($this->instance, $method), $arguments);
}
else
{
throw new RuntimeException();
}
}
//
private $method;
private $instance;
private $interface;
}
class BaseImplementation implements Base
{
public function hello()
{
echo 'hello';
}
public function world()
{
echo 'world';
}
}
class Factory
{
static
public function fetchBase()
{
return new Reference('Base', new BaseImplementation());
}
}
$object = Factory::fetchBase();
$object->hello();
$object->world();
Но зачем?.
Potaevsky
Гыыыыыыыыы.. Давай по порядку. Какие базовые вещи каких других языков ты имеешь ввиду?. И что за ересь ты несешь? Имеешь ввиду private наследование из CPP? И зачем тебе такое нужно, о горе гуру базовых вещей других языков.
Можешь подскажешь дурачку как бы ты вернул pure virtual класс в этом языке

?
И для такого ограничения есть область видимости protected вообще-то.
interface ia
{
protected function blah();
}
class aimplm implements ia
{
protected function blah() { } <--- "извне" этот метод не вызвать, читаем документацию.
}
PHP это PHP. Другие языки это другие языки. У каждого языка своя специфика, свое предназначение, и соответствующие рамки и ограничения. И вместо того что бы воротить костыль потому что так можно было сделать где-то но нельзя сделать здесь, нужно просто думать.
И что бы не конфликтовать больше, давай лучше ты напишешь задачу в целом, а не только предполагаемое тобой её решение.