可以将 php 变量命名为 $_xxx 吗?

is it accepted to name a php varible like $_xxx?

我正在构建一个站点,我包含了一个名为 "settings.php" 的设置文件, 我认为通过名称注册一个全局变量看起来很酷:$_SETTINGS 作为站点设置的数组(db_name、db_pass...等) 如此:

<?php
    $_SETTINGS = array();
    $_SETTINGS['DB_HOSTNAME']= 'localhost';
    $_SETTINGS['DB_NAME'] = 'db_test';
    $_SETTINGS['DB_USERNAME'] = 'db_user';
    $_SETTINGS['DB_PASSWORD'] = 'p422w0rd';
 ?>

然后访问子页面上的这些设置...通过访问 $_SETTINGS...

这段代码工作得很好, 但我很好奇 php 程序员社区是否可以接受将您自己的变量命名为 $_ ? 或者我的代码被认为是糟糕的设计?

谢谢

你可以这样做,但我不推荐它,因为 superglobal 变量也有这个 pattern/prefix 例如$_SERVER$_SESSION$_GET 这可能有点令人困惑。

但是根据manual。技术你可以做到:

A valid variable name starts with a letter or underscore, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

最后,你做什么是个人喜好。

我个人认为这是个坏主意。更好的解决方案是创建单例 class 在整个应用程序中提供配置。

像这样:

class MyConfigProvider
{

    private $config = array();

    private static $instance = null;

    public static function getInstance()
    {
        if (self::$instance === null)
            self::$instance = new self();

        return self::$instance;
    }

    private function __construct(){}

    public function getConfig()
    {
        return $this->config;
    }

    public function setConfig(array $config)
    {
        $this->config = $config;
    }
}

您可以通过

在应用的所有位置获取配置
$config = MyConfigProvier::getInstance()->getConfig();

这不是最好的解决方案,但它易于实施并且有效