PHP:define()类作用域常量

时间:2011-12-06 16:34:12

标签: php constants

我正在构建一个将平面文件转换为虚拟数据库的类,我试图在检索数据时将数组的值作为列名而不是索引...

$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 :(得分:0)

如果你想使用常量,我担心是不可能的。常数是全球性的。

通过不使用常量,您可以将这些名称存储在类静态成员中,并将其与$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] ];
}