gpt4 book ai didi

PHP: define() 类作用域常量

转载 作者:搜寻专家 更新时间:2023-10-31 22:14:25 25 4
gpt4 key购买 nike

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

$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() 函数似乎使常量成为全局常量,并且可以从类实异常(exception)部访问。

我希望每组声明的常量都限定在实例范围内,从而允许我在该类的另一个实例中再次使用相同的常量来访问不同的列。

有人知道这样做的方法吗?

最佳答案

如果您想使用常量,恐怕是不可能的。常量是全局的。

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

关于PHP: define() 类作用域常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8403417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com