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

时间:2013-10-22 09:52:12

标签: php class oop

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

    class MyClass {
        public function getsettings(){
            define('myconstant','values');
        }
    }
    echo MyClass::myconstant;
    

2 个答案:

答案 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();