edit: I am thinking that dependency injection is the best approach.
I am struggling to wrap my head around being able to share an object between two classes. I want to be able to create only one instance of the object, commonlib
in my main
class and then have the classes, foo1
and foo2
, to be able to mutually share the properties of the commonlib. commonlib
is a 3rd party class which has a property Queries
that will be added to in each child class of bar
. This is why it is vital that only one instance is created. I create two separate queries in foo1
and foo2
.
This is my setup:
abstract class bar{
//common methods
}
class foo1 extends bar{
//add query to commonlib
}
class foo2 extends bar{
//add query to commonlib
}
class main {
public $commonlib = new commonlib();
public function start(){
//goal is to share one instance of $this->commonlib between foo1 and foo2
//so that they can both add to the properites of $this->commonlib (global
//between the two)
//now execute all of the queries after foo1 and foo2 add their query
$this->commonlib->RunQueries();
}
}
Best Answer
Approach 1: Use a property in
bar
Make
commonlib
a property inbar
and declare getters and setters. Share that one instance ofcommonlib
that you declared inmain
betweenfoo1
andfoo2
.Edit:
Approach 2: Pass common lib as an argument and only put algos in foo1 and foo2
Thus,