如何在PHP中访问静态函数内的私有成员

25 php static private class member

我在PHP中有以下类

class MyClass
{
  // How to declare MyMember here? It needs to be private
  public static function MyFunction()
  {
    // How to access MyMember here?
  }
}
Run Code Online (Sandbox Code Playgroud)

我对使用哪种语法感到困惑

$MyMember = 0;echo $MyMember

要么

private $MyMember = 0;echo $MyMember

要么

$this->MyMember = 0;echo $this->MyMember

谁能告诉我怎么做?

在OOPS中我有点不强.

你能在第一时间做到吗?

如果没有,我应该如何声明成员,以便我可以在静态函数中访问它?

Vol*_*erK 69

class MyClass
{
  private static $MyMember = 99;

  public static function MyFunction()
  {
    echo self::$MyMember;
  }
}

MyClass::MyFunction();
Run Code Online (Sandbox Code Playgroud)

请参阅php手册的oop5章节中的可见性范围解析运算符(::).


小智 9

这是一个超级迟到的反应,但它可能会帮助某人..

class MyClass
{
  private $MyMember;

  public static function MyFunction($class)
  {
    $class->MyMember = 0;
  }
}
Run Code Online (Sandbox Code Playgroud)

这样可行.你可以通过这种方式访问​​私有成员,但如果你有$ class,你应该让MyFunction成为类的方法,就像你只需要调用$ class-> MyFunction()一样.但是,您可以拥有一个静态数组,每个实例都添加到类构造函数中,此静态函数可以访问并迭代,更新所有实例.即..

class MyClass
{
  private $MyMember;
  private static $MyClasses;

  public function __construct()
  {
    MyClass::$MyClasses[] = $this;
  }

  public static function MyFunction()
  {
    foreach(MyClass::$MyClasses as $class)
    {
      $class->MyMember = 0;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Arn*_*rno 5

在静态方法中,您不能使用调用变量,$this因为静态方法是在“实例上下文”之外调用的。

PHP 文档中明确说明了这一点。