sameold
sameold

Reputation: 19252

Where to store huge constants that my OOP class needs

I'm new to OOP and wondering what's the right OOP way to do this. My class has a method getValue which is passed input (a key) that it uses to search an array and return a value.

The thing is the array is HUGE close to 200 entries and really disrupts the readability of the method, so I'm inclined to remove it from this class, but not sure where to put it. Should I create a separate class for it, or put it in a constants class Constants::getValue() or any other suggestions? Would it be wrong to remove it from this class since it should be contained within the object that needs it?

public function getValue($input) {
    switch ($input) {
        case 'in1' : { $value = array('wsj', 'kwo'); break; }
        case 'in2' : { $value = array('wpo', 'ki2'); break; }
        .....
        default:      { $value = array('wap', 'k90'); break; }
    }
    return $value;
}

Upvotes: 3

Views: 160

Answers (2)

gdub
gdub

Reputation: 301

You could create a key=>value array in another php file and include it in your class

content_array.php:

$ARRAY = array(
               'in1' => array('wsj','kwo'),
               'in2' => array('wpo','ki2'),
                ...
               'default' => array('wap','k90')
              );

then your function could look up these values like this:

public function getValue($input){
    include_once('content_array.php');
    if(array_key_exists($input, $ARRAY)){
        $value = $ARRAY[$input];
    } else {
        $value = $ARRAY['default'];
    }
    return $value;
}

If you don't like this method, you could put all your information in a JSON file, and then read that file into an array using json_decode()

Upvotes: 2

Ernest Friedman-Hill
Ernest Friedman-Hill

Reputation: 81704

If there are two hundred cases, and each one consists of constructing a small array from a few constants, then I'd strongly consider moving all the data into a file, and replacing it with a small amount of code that reads the file and stores everything in a map/lookup table, and then a bit of code that retrieves the correct response from the map. It would certainly be easier to maintain that way, and the code would be easier to understand.

Upvotes: 1

Related Questions