Larry Garfield wrote:
> Hi folks. Somewhat philosophical question here.
>
> I have heard, although not confirmed, that the trend in the Java world in the
> past several years has been away from constructors. That is, rather than
> this:
>
> class Foo {
> public void Foo(Object a, Object b, Object c) {}
> }
>
> Foo f = new Foo(a, b, c);
>
> The preference is now for this:
>
> class Foo {
> public void setA(Object a) {}
> public void setB(Object b) {}
> public void setC(Object c) {}
> }
>
> Foo f = new Foo(a, b, c);
> f.setA(a);
> f.setB(b);
> f.setC(c);
>
> I suppose there is some logic there when working with factories, which you
> should be doing in general. However, I don't know if that makes the same
> degree of sense in PHP, even though the OO models are quite similar.
>
> So, I'll throw the question out. Who uses example 1 above vs. example 2 when
> writing dependency-injection-based OOP? Why? What trade-offs have you
> encountered, and was it worth it?
Hi Larry,
In the Java world a huge reason is because Classes have to be able to be
instantiated with no arguments in order to reverse engineered w/ JAXB so
that the classes can be used for web services (and wsdl's created etc).
Thus most of them have no arguments.
Personally I also find it good practise to instantiate with no arguments
and then set the state of the instance by calling setters.
A nice way around it is to create static methods which instantiate the
class w/ a protected or private constructor.
class Foo
{
private $a;
private function __construct() {}
public function setA( $a )
{
$this->a = $a;
}
public static function instantiateWithASet( $a )
{
$temp = new self;
$temp->setA( $a );
return $temp;
}
}
it's almost overloading lol.
Regards!
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php