из Name делаем класс, в Object внедряем его инстанс и дописываем методы __get и __call. Но это бредятина, лучше подумать над архитектурой.
class Object
{
protected $di;
public function __construct($di)
{
$this->di = $di;
}
public function __get(string $name)
{
if (property_exists($this->di, $name)) {
return $this->di->$name;
} else {
throw new \Exception('бла бла');
}
}
public function __call(string $name, array $arguments)
{
if (method_exists($this->di, $name)) {
return $arguments ? $this->di->$name($arguments) : $this->di->$name();
} else {
throw new \Exception('бла бла');
}
}
}
class Name {
public $x = 1;
public function metod() {
return 2;
}
}
$object = new Object(new Name());
echo $object->x;
echo $object->metod();