php classe:从函数获取值到成员变量的问题

时间:2010-06-21 10:45:54

标签: php class member-variables

我有一个从数据库中获取值并返回它的函数。我调用函数将它存储到成员变量中,但是我收到以下错误:

Parse error: parse error, expecting `','' or `';'' in I:\wamp\www\deposit\classes\Site.php on line 14

这是导致错误的行

public static $depositmoney = self::get_balance();

这是从数据库中获取值的函数

    public static function get_balance()
    {
        global $link, $usertable, $userid, $useridentify;

        //query current balance
        $cb = mysqli_fetch_object(mysqli_query($link, "SELECT deposit FROM ".$usertable." WHERE ".$userid."=".$useridentify.""));
        return $cb->deposit;

    }//end of function get_balance().

所有这些代码都在同一个类中。任何人都知道导致错误的原因是什么?

1 个答案:

答案 0 :(得分:3)

不能使用运行时信息声明类属性。

public static $depositmoney = self::get_balance();

上述方法无效。

参见PHP Manual on Class Properties:(强调我的)

  

类成员变量称为“属性”。您也可以使用“属性”或“字段”等其他术语来查看它们,但出于本参考的目的,我们将使用“属性”。它们通过使用public,protected或private之一,然后是普通变量声明来定义。此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,必须不依赖于运行时信息才能进行评估

您可以为$depositmoney创建一个getter,如果当前未设置该值,则初始化该值:

public static function getDepositMoney()
{
    if(self::$depositmoney === NULL) {
        self::$depositmoney = self::get_balance();
    }
    return self::$depositmoney;
}

但是,我建议删除static并使用实例方法和属性来跟踪状态。您还希望摆脱global内容并通过构造函数,setter或在方法调用期间注入依赖项。这会减少耦合并使代码更易于维护。