如何从 PHP 中的 public 静态方法访问私有 class 的 属性

How to access private class's property from public static method in PHP

我有一个 class(yii2 小部件),它具有私有属性和 public 静态函数。当我尝试从 $this->MyPrivateVar 之类的静态方法访问私有 属性 时,会生成一个关于我不必在非对象上下文中使用 $this 的错误!以下是我的代码片段:

class JuiThemeSelectWidget extends Widget
{
  private $list;
  private $script;
  private $juiThemeSelectId = 'AASDD5';
  public $label;
  ....
 public static function createSelectList($items)
  {
    $t = $this->juiThemeSelectId;
    ...
  }

我尝试了以下方法,但似乎进入了无限循环 Maximum execution time of 50 seconds exceeded

public static function createSelectList($items)
  {
    $t = new JuiThemeSelectWidget;
    $juiThemeSelectId = $t->juiThemeSelectId;
    ...
  }

那么我如何从静态方法访问私有 juiThemeSelectId

您可以使用 self:

访问它
public static function createSelectList($items)
{
  $t = self::juiThemeSelectId;
  ...
}

排序答案是:您不能在静态方法中访问非静态 属性。您无权在静态方法中访问 $this

您可以做的只是将 属性 更改为静态,例如:

private static $juiThemeSelectId = 'AASDD5';

然后用这个访问它:

echo self::$juiThemeSelectId;

有关关键字 static 的更多信息,请参阅手册:http://php.net/manual/en/language.oop5.static.php

引自那里:

Because static methods are callable without an instance of the object created, the pseudo-variable $this is not available inside the method declared as static.