RE: class attributes and __construct

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

 



> -----Original Message-----
> From: Fernando [mailto:fernando@xxxxxxxxxx]
> Sent: Thursday, April 15, 2010 10:24 AM
> To: php-general@xxxxxxxxxxxxx
> Subject: Re:  class attributes and __construct
> 
> Hello Ashely,
> 
> I would initialize the variable when I'm defining it as there isn't
> much
> of a point of doing it in the constructor unless I'm having the value
> changed by a parameter.
> 
> In my opinion:
> 
> class House
> {
>      public $roof = true;
> }
> 
> is the way to go.
> 
> Fernando.

That's what I meant.  IMO, it's also a micro optimization since it doesn't need an extra step of looking the variable and assigning the value when it's not needed.  Plus, it allows better polymorphism through methods/functions.

Regards,
Tommy

> 
> On 15/04/2010 11:54, Ashley Sheridan wrote:
> > On Thu, 2010-04-15 at 07:42 -0700, Tommy Pham wrote:
> >
> >
> >> Hi Ashley,
> >>
> >>
> >>> -----Original Message-----
> >>> From: Ashley Sheridan [mailto:ash@xxxxxxxxxxxxxxxxxxxx]
> >>> Sent: Thursday, April 15, 2010 6:38 AM
> >>> To: PHP General List
> >>> Subject:  class attributes and __construct
> >>>
> >>> I think this is probably going to end up as one of those coders'
> >>> preference type of things, but I was wondering what was considered
> the
> >>> general best approach.
> >>>
> >>> When creating a class, you can define default values for the object
> in
> >>> the class itself, and within the __construct function. Now, while I
> see
> >>> the advantage to using __construct to set properties that might
> depend
> >>> on a variable, what would be the best approach for any values that
> >>> might
> >>> likely remain at a default value and only ever change in a few rare
> >>> circumstances?
> >>>
> >>> For example:
> >>>
> >>> class Person
> >>> {
> >>>      public $right_handed = true;
> >>>
> >> I recommend setting it to private or protected instead of public to
> protect the integrity of the app.  And add a get method/function to
> obtain the value.
> >>
> >>
> >>>      function __construct($name, $height)
> >>>      {
> >>>          $this->name = $name;
> >>>          $this-height = $height;
> >>>      }
> >>>
> >>>      function set_hand($side)
> >>>      {
> >>>          if($side == 'left'
> >>>          {
> >>>              $this->right_handed = false;
> >>>          }
> >>>          else
> >>>          {
> >>>              $this->right_handed = true;
> >>>          }
> >>>      }
> >>>
> >>> }
> >>>
> >>> Now, this is a simple example, but a value like $right_handed
> should
> >>> only ever change if it's not the typical. As most people are
> >>> right-handed it would make sense to set it to true and allow it to
> be
> >>> changed to false as necessary. What I'm wonder is, where is the
> best
> >>> place to set it to true, in the list of class properties at the
> top, or
> >>> in the __construct() function?
> >>>
> >>> I know I could move it to __construct and give it a default value
> in
> >>> the
> >>> arguments list, but that brings it's own problems. What if the
> argument
> >>> list grows too big, and which attribute would be deemed more
> important
> >>> than another that you might want to override it without specifying
> >>> every
> >>> other? Is there a rule of thumb as to what belongs in __construct
> and
> >>> what does not?
> >>>
> >>> Thanks,
> >>> Ash
> >>> http://www.ashleysheridan.co.uk
> >>>
> >>>
> >> As for setting the default value in the construct, I recommend not
> to because should PHP support overloading later, you can then have
> another method/function to change its non-default value along with the
> initial parameters for the class.  I use the constructor to set initial
> parameters for the class or initialize any class specific settings such
> as connection for DBAL.
> >>
> >> Regards,
> >> Tommy
> >>
> >>
> >
> > Maybe my example wasn't the best, but I did mean that my public
> variable
> > there was a value that should be initially set with the class
> > initialisation I realise the differences between public, private and
> > protected variables, that wasn't my question. What I wanted to know
> was
> > if there was a convention about what specific properties should be
> set
> > through the public $var = method and what should be left for the
> > __construct function?
> >
> > For example, which would be better here (assuming a variable number
> of
> > variables that might be set this way:
> >
> > class House
> > {
> >      public $roof = true;
> > }
> >
> > class House
> > {
> >      function __construct()
> >      {
> >          $this->roof = true;
> >      }
> > }
> >
> > Aside from the amount of typing (which isn't a serious consideration
> for
> > me anyway) and assuming that such variable initialisation will not
> rely
> > on variable input but will be fixed with the option of a class method
> to
> > change the value later, what would be the preferred method and are
> there
> > any caveats I'm unaware of right now (as I'm aware of none so far) to
> > either method?
> >
> > Thanks,
> > Ash
> > http://www.ashleysheridan.co.uk
> >
> >
> >
> >


-- 
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