Hey guys got an architecture problem, I will explain the structure first
Service:
- TestService
Classes:
- InterfaceClass
- ParentClass
- FirstChildClass
- SecondChildClass
- ThirdChildClass
The Parent implements the interfaceClass and the childs extends the parentClass.
all childs have different functions, lets say firstfunction on FirstChildClass, secondfunction on SecondChildClass,
i want to call firstfunction on serice by calling only the parent, so for example ParentClass:init()->firstclass();
the language im gonna be using is PHP, anyone have any idea how can I implement such thing?
CodePudding user response:
You will need a generalized reference variable(of the base superclass) in your Service class constructor to achieve this. It is called generalization and widening. In programming terms, we call it Upcasting.
BaseActivity class
class BaseActivity{
function base(){
echo "from base", PHP_EOL;
}
}
MovieClass class
class MovieClass extends BaseActivity{
function movie(){
echo "from MovieClass", PHP_EOL;
}
}
WalkClass class
class WalkClass extends BaseActivity{
function walk(){
echo "from WalkClass", PHP_EOL;
}
}
Service class
class Service{
public $activity;
function __construct(BaseActivity $b){ // here you have the base generalized reference of your hierarchy
$this->activity = $b;
}
}
Driver Code:
<?php
$service_A = new Service(new MovieClass());
$service_A->activity->movie();
$service_B = new Service(new WalkClass());
$service_B->activity->walk();
Note: So whenever you pass the object to the Service class constructor, it has to be a type of BaseActivity.
