使用$ this关键字的php静态变量初始化

时间:2019-02-26 10:49:35

标签: php variables static initialization

我在一个类中有一个方法,我想在其中初始化一个静态变量。

1 /当我初始化变量,然后使用$this关键字将其影响为其他某个值时,它将起作用。例如:

class Test {
   // ...
   function test($input_variable)
   {
      static $my_static_variable = null;
      if (!isset($my_static_variable))
        $my_static_variable = $this->someFunction($input_variable);
      // ... some further processing 
   }
}

2 /但是,当我尝试使用$this关键字直接初始化/构造变量时,出现语法错误:unexpected '$this' (T_VARIABLE)

class Test {
       // ...
       function test($input_variable)
       {
          static $my_static_variable = $this->someFunction($input_variable); // *** syntax error, unexpected '$this' (T_VARIABLE)
          // ... some further processing 
       }
}

1 /是初始化静态变量的好方法吗? 为什么不允许2 /,因为它应该做与1 /完全相同的事情?

我正在使用PHP 5.5.21(cli)(构建于2016年7月22日08:31:09)。

谢谢

3 个答案:

答案 0 :(得分:0)

您不能在静态变量上使用#Class class StudentDetails(): def __init__(self, id, Name, Status): self.id= id self.Name= Name self.Status= Status def main(): results= LinkCursor.fetchall() #databse results 。您可以将$this与范围解析运算符(::)结合使用。

这里是示例:

self

答案 1 :(得分:0)

可以在不实例化类的情况下访问静态变量和函数。您不能使用$ this访问声明为static的变量或函数。 您必须使用范围解析运算符::来访问声明为静态的变量和函数。

对于变量:-

class A
{
    static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;// Try to use $this here insted of self:: you will get error
    }
}

class B extends A
{
    public function fooStatic() {
        return parent::$my_static;
    }
}

使用以下命令访问变量:-

print A::$my_static

对于功能:-

class A {
    public static function aStaticMethod() {
        // ...
    }
}

您可以按以下方式调用该函数:-

A::aStaticMethod();

答案 2 :(得分:0)

我想我有答案。在php documentation中,说明如下:

  如上例所示,可以声明

静态变量。从   PHP 5.6您可以为这些变量赋值,这些变量就是结果   ,但您不能在此处使用任何函数,这会导致   解析错误

所以我想这对于PHP 5.5也适用。

正如@MagnusEriksson指出的那样,我也可以使用类属性。但是,我不希望在test()方法之外的其他地方访问我的变量。

顺便说一句,doc中的静态属性在某种程度上说是相同的:

  

静态属性不能通过使用   箭头运算符->。

     

与其他任何PHP静态变量一样,静态属性只能是   在PHP 5.6之前使用文字或常量进行初始化;表达   不允许。在PHP 5.6和更高版本中,相同的规则适用于const   表达式:可以提供一些有限的表达式   在编译时进行评估。