On 03/24/2010 05:58 PM, Richard Quadling wrote:
On 24 March 2010 12:08, Nilesh Govindarajan<li...@itech7.com>  wrote:
On 03/24/2010 05:31 PM, Richard Quadling wrote:


I have a scenario where I would _like_ to have multiple constructors
for a class.

Each constructor has a greater number of parameters than the previous one.


class myClass {
__construct(string $Key) // use key to get the complex details.
__construct(string $Part1, string $Part2, string $Part3) //
Alternative route to the complex details.
__construct(array $Complex) // All the details

Essentially, SimpleKey is a key to a set of predefined rules. Part1, 2
and 3 are the main details and well documented defaults for the rest
of the rules. Complex is all the rules.

Each constructor will end up with all the parts being known ($Key,
$Part1, $Part2, $Part3, $Complex).

But, PHP doesn't support multiple constructors.

Initially I thought about this ...

__construct($Key_Part1_Complex, $Part2=Null, $Part3=Null)

But then documenting the first param as being 1 of three different
meanings is pretty much a no go.

So I'm looking for a clean and easily understood way to provide this.

I won't be the only user of the code and not everyone has the same
knowledge level, hence a mechanism that is easily documentable.

I think I may need a factory with multiple methods (FactoryKey,
FactoryPart1To3, FactoryComplex). Make the factory a static/singleton.
All these methods eventually call the real class with the complex

Is that obvious enough?



Don't give specify any parameters in the function declaration.

Use helper functions inside the class, and decide at the constructor which
helper to call using func_get_arg() and func_get_args()

You can get the no. of arguments using count(func_get_args())

and then using swtich statement call the relevant helper function using
call_user_func_array with parameters.

A sample:

public function __construct() {

switch(count(func_get_args())) {

case 1:
call_user_func_array(array($this, '_helper1'), func_get_args());
// and so on


Nilesh Govindarajan
Site&  Server Administrator

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

And how would you docblock that?

Documentation is important as that describes the intent to the users
of the code.

In this method documentation cannot be generated by doxygen or phpDocumenter, etc.

You will have to write the documentation by your own.

I don't see any other solution to your c++ like constructor overloading problem.

If anyone else knows on this list, I will surely like to know what it is :)

Nilesh Govindarajan
Site & Server Administrator

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to