这里的常量是在函数内部动态定义的,我无法使用类名访问它,我想通过类名访问它的任何帮助。 我在函数中的常量来自 Db,我正在从 db 生成常量,我想用类名访问它们,请告诉我如何使用"定义"来使常量可用或类
类 我的类 { 公共函数 getsettings(){ 定义('myconstant','values'); } } echo MyClass::myconstant;
函数define()将为全局范围定义常量,无论您在哪里调用它 - 它与任何类或上下文无关。要定义类常量,应使用const
关键字:
class MyClass
{
const myconstant = 'values';
//..
}
要获得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();