PHP: define () констант области видимости - PullRequest
3 голосов
/ 06 декабря 2011

Я создаю класс, который превращает плоский файл в виртуальную базу данных. Я пытаюсь использовать значения массива в качестве имен столбцов, а не индексов при получении данных, например ...

$db = new Database($config, array('first', 'second', 'third', 'fourth'), true);

Массив отправляется в конструктор в database.php:

public function __construct(Config $config, array $constants = null, $caseInsensitive = false)  {
            $this->_config = $config;
            if(!is_null($constants))
                $this->defineColumns($constants, $caseInsensitive);
            return true;
        } 

, который передается в defineColumns():

private function defineColumns($constants, $caseInsensitive) {
            for ($i=0;$i<count($constants);$i++)
                define($constants[$i], $i, $caseInsensitive);   
        }

Это работает, и ятеперь можно использовать first для доступа к столбцу 0, second для доступа к столбцу 1 и т. д. ...

Однако функция define(), кажется, делает константы глобальными и доступными извне экземпляра класса.

Я хочу, чтобы каждый набор объявленных констант находился в пределах одного экземпляра, что позволяет мне снова использовать эту же константу в другом экземпляре класса для доступа к другому столбцу.

Кто-нибудь знаетспособ сделать это?

1 Ответ

0 голосов
/ 06 декабря 2011

Боюсь, это невозможно, если вы хотите использовать константы.Константы являются глобальными.

Не используя константы, вы можете хранить эти имена в статическом члене класса и использовать их с чем-то вроде $myinstance->get('third').

protected static $columns = array();

private function defineColumns($constants) {
    for ($i=0;$i<count($constants);$i++)
        self::$columns[$constants[$i]] = $i;    
}

public function get($column) {
    return $IDONTKNOWYOURIMPLEMENTATION[ self::$columns[$column] ];
}
...