NYCPHP Meetup

[nycphp-talk] Static variables, self:: and abstract classes

Andrew Kamm akamm at demicooper.com
Thu Jun 8 07:45:28 EDT 2006


>>> just one question had crossed my mind right now...
>>> 
>>> why did u had declared the variable as static?
>> 
>> The idea was to have an abstract parent class for customer preferences since
>> most preference classes would basically share the same code.  The static
>> vars (or constants) that were to be stored in the individual classes were
>> properties that differentiate how the child classes would interact with the
>> database (among other things).
> 
> Static is the wrong approach.  So scratch what I said in my prior email, I
> was just trying to prove it could be done.
> 
> Declare the methods in the parent and the properties in the children.
> Then instantiate your class into an object.  You get your desired outcome
> without a fake constructor plus you don't have to maintain properties in
> the parent that are just going to get overridden.
> 
> class base {
>     public function getTablename() {
>         echo $this->_tablename . "<br/>\n";
>     }
> }
> 
> class joes extends base {
>     protected $_tablename = 'joestable';
> }
> 
> $obj = new joes;
> $obj->getTablename();
> 
> --Dan


Actually, you were pretty right on with the other suggestion in terms of
this particular implementation (the other method being to use a 'setVars()'
method to set the static vars in a class that is being referenced
statically).

Either way would work, but I want to limit instantiating an object unless
it's really going to be utilized as an object (contrary to the email I sent
a couple days ago about instantiating objects with the string 'static'
rather than the numeric ID they should use).

Basically, I probably should have structured those classes differently, but
I didn't anticipate the whole inherited 'self::' calls referencing the
parent rather than, well... 'self::'. I always thought that's what parent::
was for. I still scratch my head at the logic of that -- I'd love to see an
example of it in a beneficial situation so I could look at it as a
functionality rather then a limitation of PHP.

Thanks for all the help, it's appreciated.


-- 
Andrew Kamm





More information about the talk mailing list