Php 函数中定义的常量无法通过类名访问请参见代码

Php 函数中定义的常量无法通过类名访问请参见代码,php,class,oop,Php,Class,Oop,在这里,常量是在函数内部动态定义的,我无法使用类名访问它。我希望通过类名访问它。 我的函数中的常量来自Db,我从Db生成常量,我想用类名访问它们。请告诉我如何使用“定义”使常量或类可用 class MyClass { public function getsettings(){ define('myconstant','values'); } } echo MyClass::myconstant; 类MyClass{ 公共函

在这里,常量是在函数内部动态定义的,我无法使用类名访问它。我希望通过类名访问它。 我的函数中的常量来自Db,我从Db生成常量,我想用类名访问它们。请告诉我如何使用“定义”使常量或类可用 class MyClass { public function getsettings(){ define('myconstant','values'); } } echo MyClass::myconstant; 类MyClass{ 公共函数getsettings(){ 定义('myconstant','values'); } } echo MyClass::myconstant;

函数将为全局范围定义常量,无论您在哪里调用它-它与任何类或其上下文无关。要定义,应使用
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
,因为您希望动态地将从数据库检索到的值分配给常量。因此,您必须使用我在回答中已经给出的
define()
语法

我的建议 出于您的目的,我建议您使用带有
private
访问说明符和
static
修饰符的变量,而不是常量。在这种情况下,您将被允许以特权方式访问或修改它们,即仅从基类内部访问或修改它们

这实际上是OOP的需要,即强调数据的安全性(即在私有访问说明符方面)

示例代码
为什么在类中使用常量?你知道你可以使用类属性,对吗?!最明智的做法是在类中使用类常量,而不是全局常量。我如何才能使类常量?@Jabeen检查我的更新答案。我必须从db中获取常量并使用该类生成,因此根据定义,这不是常量。常量是一种东西。嗯,常量,不是一种动态的东西,它取决于运行时的条件。您的案例将是类属性。实际上,我的数据库中存在常量列表,我必须获取并生成这些常量,我使用类内的函数执行此操作,但无法使用类名访问。这仍然违反了常量的逻辑含义。常量不是您应该在运行时定义的东西(通常,即使是
define()
函数也不太好)。你可以改为使用静态公共属性——这将是最好的解决方案。实际上,我有一些限制,这就是为什么我想这样做。我的老板希望它们在现有项目中的变化最小的情况下是动态的。还有没有其他可能使用常量和类名?你的第二个选择suggestion@RajeshPaul这也是对OOP的完全误用:为什么whoull
getsettings()
是一个实例方法?为什么要调用一个方法
return\u constant
,而它可能返回不同的值[
NULL
如果在
getsettings
之前调用,那么在
getsettings
之后调用另一个值]?如果需要,只需在对象构造函数中注入参数:在这种情况下,依赖项注入是一种方法。
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();