2

这里常量是在函数内部动态定义的,我无法使用类名访问它,我想通过类名访问它。我在函数中的常量来自 Db,我正在从 db 生成常量,我想用类名访问它们请告诉我如何使用“定义”来使常量或类也可用

    我的班级{
        公共函数getsettings(){
            定义('我的常量','值');
        }
    }
    回声 MyClass::myconstant;
    

4

2 回答 2

5

函数define()将为全局范围定义常量,无论你在哪里调用它——它与任何类或它的上下文无关。要定义类常量,您应该使用const关键字:

class MyClass 
{
    const myconstant = 'values';
    //..
}
于 2013-10-22T09:55:41.960 回答
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.

现在,如果您想使用与类名关联的常量,则必须使用-keyword声明常量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();
于 2013-10-22T10:10:12.997 回答