访问类中的静态变量

时间:2017-10-05 16:31:55

标签: php

由于以下代码,下面的示例出现语法错误:

"another_key" => [ 2 => self::$someStr ]

使用如下内容:

"another_key" => [ 2 => "bar" ]

语法是否正确。有没有办法访问$ someStr而不是硬编码字符串?

<?php

class Foo {

  protected static $someStr = 'bar';

  private static $arr = [
    "some_key" => [ 1 ],
    "another_key" => [ 2 => self::$someStr ]
  ];
}

2 个答案:

答案 0 :(得分:2)

您无法访问其他静态变量声明中的静态变量。您可以声明一个类常量,也可以通过函数访问来初始化它。类常量看起来像这样:

class Foo {

  const someStr = 'bar';

  private static $arr = [
    "some_key" => [ 1 ],
    "another_key" => [ 2 => self::someStr ]
  ];
}

或使用功能:

class Foo {

  private static $someStr = 'bar';

  private static $arr = [
    "some_key" => [ 1 ],
    "another_key" => [ 2 => null ]
  ];

  private static function setKey(){
      self::$arr['another_key'] = [2 => self::$somStr];
  }
}

在访问变量之前,您必须在某个时刻致电Foo::setKey()

答案 1 :(得分:0)

如果要访问属性以设置另一个属性的值,则应在类的构造函数中执行此操作。像这样:

class Foo {

    protected static $someStr = 'bar';

    private static $arr = [
        'some_key' => [1]
    ];

    public function __constructor()
    {
        self::arr['another_key'] = [2 => self::$somStr];
    }
}

为此,您需要实例化您的课程。

您可以在PHP documentation中查看有关属性声明的一些示例。