这里的常量是在函数内部动态定义的,我无法使用类名访问它,我希望通过类名访问它。 函数中的常量来自Db,我从db生成常量,我想用类名访问它们请告诉我如何使用“define”来使常量可用或类也可以
class MyClass { public function getsettings(){ define('myconstant','values'); } } echo MyClass::myconstant;
答案 0 :(得分:5)
函数define()将为全局范围定义常量,无论你在哪里调用它 - 它与任何类或它的上下文无关。要定义class constant,您应该使用const
关键字:
class MyClass
{
const myconstant = 'values';
//..
}
答案 1 :(得分:0)
要使myconstant
存在,您需要调用函数getsettings()
。
此后myconstant
将是全局常量,但不会成为该类的一部分,即MyClass
。
使用以下代码:
class MyClass {
public function getsettings(){
define('myconstant','values');
}
}
$obj=new MyClass;
$obj->getsettings();
echo myconstant;// prints 'values' as you need.
现在,如果您想将常量用作与类名相关联,那么您必须使用const
- 关键字声明常量。
但是在那种情况下你必须在声明它时为该常量指定一个静态值。因此,出于您的目的 ,您无法使用const
,因为您希望将从数据库中检索到的值动态分配给常量。因此你必须使用我在答案中已经给出的define()
语法。
出于您的目的,我建议您使用private
访问说明符与static
修饰符而非常量的变量。在这种情况下,您将被允许以特权方式访问或修改它们,即仅从基类内部。
实际上需要 OOP 即强调数据的安全性(即用 private
访问说明符)。
class MyClass {
private static $constant;
public function getsettings(){
//code to access database values...
self::$constant=$database_val; //$database_val is assigned with values from the database
}
public function return_constant()
{
return self::$constant;
}
}
$obj=new MyClass;
$obj->getsettings();
echo $obj->return_constant();