On Thu, Jun 5, 2008 at 12:15 PM, Tyson Vanover <[EMAIL PROTECTED]> wrote:
> I have a class that has a list of valid keys, and an array of values. When
> a value is added to the array it's key is first checked against the list of
> valid keys (this is to prevent injection issues we have been having later on
> in the project).
>
> class parent{
> private $validkeys = 'title,color,name';
> private $values = array();
> }
> That class is inherited by other classes that mostly just have an expanded
> list of valid keys. I would like to be able to update the valid key list
> without having to craft a constructor for child objects. I would rather not
> give each child class the constructor,
>
> __construct()
> {
> $this->validkeys.= ',setting,...';
> parent::__construct();
> }
>
> since most child classes have no need of a unique constructor.
i dont quite understand this reasoning.. if you want to add some valid keys,
based upon the design of the parent, it seems to me the children do have a
need for an overridden constructor. if you have accessor methods w/ a
consistent naming convention, you could omit the $validKeys array
altogether, and determine if a given field is valid based upon runtime
introspection. something like this,
/// in the parent class
protected function isFieldValid($field) {
if(method_exists($this, 'get' . ucfirst($field)))
return true;
else
return false;
}
this will work in all the child classes as well, as long as you stick to a
consistent naming convention, and you can of course add a check for a set..
method as well if you like. im not saying this technique is the holy grail
or anything, im merely offering it as an alternative to your current
solution.
-nathan