【问题标题】:php Constant key value array [duplicate]php常量键值数组[重复]
【发布时间】:2013-04-10 05:18:43
【问题描述】:

有没有办法用下面的 php 中提到的键常量创建数组

class MysqlConstants
{
    const masterDb['HOST'] = "ip";
    const masterDb['user'] = "user";
}

【问题讨论】:

标签: php


【解决方案1】:

不,这是不可能的;类常量必须是文字,而不是表达式。最接近的选择是静态属性:

class MySqlConstants
{
    public static $masterDb = array('HOST' => "ip", 'user' => "user");
}

我个人不喜欢这种方法,因为常量应该是不可变的。这将是一个更好的方法:

class MySqlConstants
{
    private static $masterDb = array('HOST' => "ip", 'user' => "user");

    public final static function getMasterDb()
    {
        return self::$masterDb;
    }
}

最后你可以拆分常量:

class MySqlConstants
{
    const HOST = "ip";
    const user = "user";
}

顺便说一句,我不建议在代码中存储配置,除非它们的应用程序常量;例如,最好将连接设置等存储在 ini 文件中,然后使用parse_ini_file() 检索它。

【讨论】:

  • ist 显示解析错误:语法错误,意外 '['
  • @SheldonCooper 已修复,它仅适用于带有 [] 符号的 5.4 :)
【解决方案2】:

你也可以序列化你的数组,然后放入常量中:

# define constant, serialize array
define ("CRED", serialize (array ("host"=>"ip", "user"=>"user")));

# use it
$my_credential = unserialize (CRED);

【讨论】:

  • 这必须是迄今为止对该问题的最佳答案。但就实际实现而言,我同意 Jack。
【解决方案3】:

我建议在另一个名为 config.php 的 php 文件中使用define("MYSQL_HOST","ip");,这样您就可以使用MYSQL_HOST 轻松访问它,而无需在每次您想使用它时调用类实例或global $masterDb

拥有 config.php 的另一个好处是您可以轻松修改常用变量。

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 2019-08-28
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2021-12-26
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多