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

2022-08-30 14:42:31

我在PHP中有以下类

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

我对使用哪种语法完全困惑

$MyMember = 0;echo $MyMember

private $MyMember = 0;echo $MyMember

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

有人可以告诉我怎么做吗?

我在OOPS方面有点不强。

你一开始就能做到吗?

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


答案 1
class MyClass
{
  private static $MyMember = 99;

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

MyClass::MyFunction();

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


答案 2

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

class MyClass
{
  private $MyMember;

  public static function MyFunction($class)
  {
    $class->MyMember = 0;
  }
}

这行得通。你可以通过这种方式访问私有成员,但是如果你有$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;
    }
  }
}

推荐