如何从PHP中的公共静态方法访问私有类的属性

时间:2015-01-24 23:25:29

标签: php oop

我有一个类(yii2小部件),它具有私有属性和公共静态函数。当我尝试从静态方法(如$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

2 个答案:

答案 0 :(得分:2)

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

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

private static $juiThemeSelectId = 'AASDD5';

然后使用它访问它:

echo self::$juiThemeSelectId;

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

从那里引用:

  

因为静态方法在没有创建对象实例的情况下是可调用的,所以伪变量$ this在声明为static的方法中不可用。

答案 1 :(得分:0)

您可以使用self访问它:

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