我可以在一个类中设置一个常量,然后在PHP外访问它吗?

| 我试图在类的内部初始化一些值,并将其保存为常量,然后在代码的不同部分外部访问它们。
<?php

class Config {

  public static function initialize() {
    define(\'TEST\',\"This is a Constant\");
  }

}

$config = Config::initialize();
// do something with the constants
我可以在外面访问吗?
已邀请:
Class常量使用
const
关键字。您无需使用define函数来定义它们。像这样:
class Config {
        const TEST = \"This is a constant\";
}

// then use it:
var_dump(Config::TEST);
在PHP中,不能动态设置常量的值,但是可以使用公共静态变量获得类似的行为。即。
class Config2 {
    public static $test = null;
    public static function initialize()
    {
        self::$test = \"This is not a constant\";
    }
}

// Then use like
Config2::initialize();
var_dump(Config2::$test);
缺点是,没有什么可以阻止其他代码从类外部设置值。如果需要对此进行保护,则应使用吸气剂功能方法。例如。
class Config3 {
    private static $_test = null;
    public static function initialize()
    {
        self::$_test = \"This is not a constant, but can\'t be changed outside this class\";
    }

    public static function getTest()
    {
        return self::$_test;
    }
}

// Then use like
Config3::initialize();
var_dump(Config3::getTest());
class Config {
  const TEST = \"This is a Constant\";

  static public $test = \"This is a static property test.\"
  static protected $test2;

  public static function initialize() {
      self::$test2 = \'initialized\';
      return self::$test2;
  }

  public static function getTest2()
  {
      return self::$test2;
  }
}

echo Config::TEST; // outputs This is a Constant
echo Config::$test; // outputs This is a static property test.
echo Config::initialize(); // outputs initialized;
echo Config::getTest2(); // outputs initialized;
如果您需要动态设置值,那么您就不想使用常量,而要使用静态属性。如果只希望
Config
类能够直接操纵此属性的值,则使用
private
protected
关键字。如果那不是问题,那么您可以使用
public
属性。 根据您要实现的目标,另一种也许是最可靠的方法是使用常量访问类的静态或实例特定属性:
class Config
{
  const TEST = 0;
  const TEST2 = 1;

  protected static $conf = array();

  public static function initialize($testVal, $test2Val)
  {
    $conf[self::TEST] = $testVal;
    $conf[self::TEST2] = $test2Val;
  }

  public static function get($key)
  {
     if(isset(self::$conf[$key])
     {
       return self::$conf[$key];
     }
  }
}

Config::initialize(\'Test\', \'Test 2\');
echo Config::get(Config::TEST);
echo Config::get(Config::TEST2);
不是来自您的原始代码。但是以下内容将作为常量类变量工作。
class Config {
    const TEST = \"This is a Class Constant\";
...
}
可从包含
Config
类声明的任何地方访问,例如:
echo Config::TEST;
是的-您可以as14的价格访问它
在这种情况下,您可能需要的只是带有getter方法或类常量的
private
变量。

要回复问题请先登录注册