[dev] Horde_Core_Factory_Base and E_STRICT

Michael M Slusarz slusarz at horde.org
Wed Jul 6 16:03:07 UTC 2011


Quoting Chuck Hagenbuch <chuck at horde.org>:

> Quoting Michael M Slusarz <slusarz at horde.org>:
>
>> Quoting Gunnar Wrobel <wrobel at horde.org>:
>>
>>> Hi!
>>>
>>> The class "Horde_Core_Factory_Base" implements the method  
>>> "create()" but nearly all derived factories use a method with  
>>> additional parameters ($driver, $params, etc) which is not  
>>> E_STRICT. What is the idea of "Horde_Core_Factory_Base" and the  
>>> base "create()" method? Can it simply be removed? Or is just a  
>>> problem on my side?
>>
>> This is super-annoying on PHP's part.  By removing the create()  
>> definition in Horde_Core_Factory_Base, there is now NO indication  
>> that a subclass needs to implement a create() method by looking at  
>> the generated documentation for HCF_Base.
>>
>> Not sure if there is a way to indicate this via phpdoc, but at a  
>> minimum I think we need to at least implement the class in HCF_Base  
>> and then comment it out.
>
> What is the point of Horde_Core_Factory_Base? I'd be inclined to remove it.

No.  This has already been discussed at length previously on the list.  
  The problem is that we call injectors two different ways:

$injector->getInstance('Foo')
$injector->getInstance('Foo2')->create($param1, $param2)

They are NOT interchangable.  In the second instance, the constructor  
will store a copy of the injector in a private variable ($_injector).   
Previously, EVERY injector factory that used that pattern had to  
define both the private variable and the constructor.  Now it is done  
by the base class (as it should be).

On a non-technical level, it gives a quick indication which injector  
format to use (by looking at the class name).  This is what I use to  
determine how to call injectors.

michael

___________________________________
Michael Slusarz [slusarz at horde.org]



More information about the dev mailing list