3

One of the things I would like to follow is to stick to the best coding practices. One of them is DRY rule (Don't Repeat Yourself). I try to define some constants in proper model class and use them everywhere else in the code, so when it comes to a little change, it has to be done only in one place.

I have this class Hero_attributes, which has several constants, e.g.:


class Hero_attributes
{
    const ID = 'id';
    const NAME = 'name';
    const LEVEL = 'level';
    const MAG_LEVEL = 'maglevel';
    const VOCATION = 'vocation';
    const GENDER = 'sex';
    const SPEED = 'speed'
    (...)
}

I have also made a custom config file tenkai_config.php which is autoloaded. In the config array I'd like to use constants from Hero_attributes class as keys, i.e.:


$config['vocations']['default'] = array(
    'hero' => array(
        Hero_attributes::LAST_LOGIN => 0,
        Hero_attributes::LEVEL => 1,
        Hero_attributes::MAG_LEVEL => 80,
        Hero_attributes::RESIDENCE => 1,
        Hero_attributes::POSITION_X => 73,
        Hero_attributes::POSITION_Y => 181,
        Hero_attributes::POSITION_Z => 6,
        (...)
    )
);

However, I get Fatal error: Class 'Hero_attributes' not found in C:\wamp_new\www\yourwodb\application\config\tenkai_config.php on line 29 message.

How can I use constants in config file?

1
  • It wont work, because config.php variables loading dynamicly Commented Apr 1, 2012 at 18:21

2 Answers 2

5

If you only need to define constants. You can define them in ./application/config/constants.php file they are available throughout the application

Sign up to request clarification or add additional context in comments.

4 Comments

Yes I could do that, but in my opinion it would not be consistent with best coding practices. I want every piece of code to belong to the right place (class, config, etc). I don't really want to use one global place with all mixed constants.
i think it is a good practice where you have specific where your constants are defined and it would be easy to maintain in future as you know that all constants are defined in one file
Well, I can agree with that. However, if constants are strictly related with one, let's say module, then imo it is better to have them separated. Of course if constant has its use in many different places and context then why not to make it global. Yet, my constants usually are used in a strict defined area. Anyways, thanks for the answer :)
I agree with @Ventus. I'm working on a piece of code right now that sends out mass emails to users. It's more appropriate to have the message statuses as constants in the message model rather than the global configuration file.
0

You need to autoload the Hero_attributes model class. Probably have to do that before autoloading the config file.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.