Hi,

I was using Torben Nehmer's Wrapper class CArticle
(http://www.nathan-syntronics.de/midgard/oop/baseclasses/CArticle.html,
read
http://www.nathan-syntronics.de/midgard/oop/extending.html
for backgroundinfo).
In my own implementation (I actually extend CArticle,
but that's not relevant here) I wanted to have a
constructor that would be the equivalent of
mgd_get_article_by_name($topic_id, $article_name).  In
Torben's CArticle, only the behaviour of
mgd_get_article($article_id) is mimicked by 

new CArticle($article_id);

Now, in another language than PHP, there would be no
problem creating a second constructor with a different
signature, thus:

$article = new CArticle($article_id);
$article = new CArticle($topic_id, $article_name);

making two different constructors.  This is not
possible in php however (well, strictly spoken it is
possible with Variable-length argument lists, see
further).  The way I solved it now is:

$article_pointer = new CArticle(); // instantiating a
still empty object with ID 0  
$article_pointer->assign_to_article_by_name($this->topic_id,
$this->article_id);

with the implementation of 
"assign_to_article_by_name" reading: 

function assign_to_article_by_name($par_topic_id,
$par_article_id)
{    
  $article = mgd_get_article_by_name ($par_topic_id,
$par_article_id);
  if (!$article) 
  {
    $this = false;
    return false;
  }
  $this->_copyMgdData($article);
}

This is a bit ugly, because if I call
assign_to_article_by_name on an already filled
CArticle object, its own content is overwritten by the
found article in the indicated topic and with the
indicated name in mgd_get_article_by_name .

Alternatives here:
PHP does allow for a varying number of parameters, but
it's a bit ugly again.  In the constructor, you could
test on the number of parameters but this would still
allow only one implementation with 1 parameter, only
one implementation with 2 parameters, etc...

Maybe an extra parameter would be better:
function CArticle ($par_constructortype = "id",
$par_parameter_array)
{
  if ($par_constructortype="id")
  {
  ...
  }
  if ($par_constructortype="name")
  {
  ...
  }
}
A possible problem with the last implementation is
that overriding the constructor in an inherited class
becomes a bit more complex?

Torben, Philipp and other users of the extended
MidgardClasses, maybe you could give your opinion
here?

pascal

__________________________________________________
Do You Yahoo!?
Yahoo! Finance - Get real-time stock quotes
http://finance.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to