如何解决我可以在一个类中设置一个常量,然后在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 举报,一经查实,本站将立刻删除。