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

如何解决我可以在一个类中设置一个常量,然后在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
变量。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?