Re: Constructor usage

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux