StubObject: Allow using a factory function to construct the object
If $class is a callable, then assume it is a factory function, and pass that onto ObjectFactory. Change-Id: I20c3650843c2803e0f9521d67bb037abfc28e1d9
This commit is contained in:
parent
95eed3189a
commit
f627188a6f
1 changed files with 14 additions and 4 deletions
|
|
@ -48,6 +48,9 @@ class StubObject {
|
|||
/** @var null|string */
|
||||
protected $class;
|
||||
|
||||
/** @var null|callable */
|
||||
protected $factory;
|
||||
|
||||
/** @var array */
|
||||
protected $params;
|
||||
|
||||
|
|
@ -55,12 +58,17 @@ class StubObject {
|
|||
* Constructor.
|
||||
*
|
||||
* @param string $global Name of the global variable.
|
||||
* @param string $class Name of the class of the real object.
|
||||
* @param string|callable $class Name of the class of the real object
|
||||
* or a factory function to call
|
||||
* @param array $params Parameters to pass to constructor of the real object.
|
||||
*/
|
||||
public function __construct( $global = null, $class = null, $params = [] ) {
|
||||
$this->global = $global;
|
||||
$this->class = $class;
|
||||
if ( is_callable( $class ) ) {
|
||||
$this->factory = $class;
|
||||
} else {
|
||||
$this->class = $class;
|
||||
}
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
|
|
@ -110,8 +118,10 @@ class StubObject {
|
|||
* @return object
|
||||
*/
|
||||
public function _newObject() {
|
||||
return ObjectFactory::getObjectFromSpec( [
|
||||
'class' => $this->class,
|
||||
$params = $this->factory
|
||||
? [ 'factory' => $this->factory ]
|
||||
: [ 'class' => $this->class ];
|
||||
return ObjectFactory::getObjectFromSpec( $params + [
|
||||
'args' => $this->params,
|
||||
'closure_expansion' => false,
|
||||
] );
|
||||
|
|
|
|||
Loading…
Reference in a new issue