Nick Wilson wrote:

>So I was thinking:
>
>$form=new form('dk')
>
>Would extend the class to include all the dk language routines and
>
>$form=new form('en')
>
>Would do likewise for english.
>
You can do this with encapsulation. Your "form" object would actually be 
a wrapper around an encapsulated object which does all of the actual 
work. When you call the constructer it specifies which object is 
encapsulated by the wrapper. For example:

class FormBase {
    // Contains any methods shared by both formDK and formEN
}

class FormDK extends FormBase {
    // The class for DK language support
}

class FormEN extends FormBase {
    // The class for EN language support
}

class Form {
    var $formObject;
    function form($language) {
        if ($language == 'dk') {
            $this->formObject = new FormDK;
        } else {
            $this->formObject = new FormEN;
        }
    }
    // The other methods in this class simply "pass through" to 
$this->formObject - e.g
    function doSomething($variable) {
        return $this->formObject->doSomething($variable);
    }
}

Another different of doing the same kind of thing would be to use an 
"object factory" as seen in the PEAR DB abstraction layer. This works by 
having a static class method (i.e a method that can be called without 
creating an instance of the class first) which returns a different 
object depending on what arguments you use. Here is an example (it 
expects FormEN and FormDK to have been defined as above):

class Form {
    function getFormObject($language) {
        if ($language == 'dk') {
            return new FormDK;
        } else {
            return new FormEN;
        }
}

You can now create you object with the following code:

$form = Form::getFormObject('en');
or
$form = Form::getFormObject('dk');

<disclaimer: I haven't tested any of the above code but the principles 
should be sound>

Cheers,

Simon Willison



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

Reply via email to