函数内部定义的常量无法通过类名访问,请参阅代码


Constant defined inside function is not acceible via class name please see code

这里的常量是在函数内部动态定义的,我无法使用类名访问它,我想通过类名访问它的任何帮助。 我在函数中的常量来自 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();