如何在静态方法中访问类变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在静态方法中访问类变量相关的知识,希望对你有一定的参考价值。

我得到错误Undefined class constant 'app_id'。我正在尝试访问getFBInstance()方法中声明的InitialSetUp类的变量,这个方法是从静态方法check_user()调用的。我猜这个new FacebookFacebook([])中的self关键字指的是Facebook类,这就是为什么错误发生但是如何访问app_id和getFBInstance()中的其他变量

require_once __DIR__ . '/vendorFacebook/autoload.php';
class InitialSetUp{
 public $app_id = "XXXXXXXXXX";
    public $app_secret = "XXXXXXXXXX";
    public $default_graph_version = 'v2.11';

}
public function getFBInstance() {

        return new FacebookFacebook([
            'app_id' => self::app_id, // here i am not able to access InitialSetUp' app id 
            'app_secret' => self::app_secret,
            'default_graph_version' => self::default_graph_version,
        ]);
    }

    public static function check_user() { 
 $fb = self::getFBInstance();
}
答案

由于$app_id不是静态的,你需要实例化IntialSetUp类。我还建议你研究创建get functions

public function getFBInstance() {

    $initialSetup = new InitialSetUp();

    return new FacebookFacebook([
        'app_id' => $initialSetup->app_id, // here i am not able to access InitialSetUp' app id 
        'app_secret' => $initialSetup->app_secret,
        'default_graph_version' => $initialSetup->default_graph_version,
    ]);
}

self关键字指的是使用它的类的元素以及静态属性和方法。

另一答案

使用$ this在类中调用变量

 public function getFBInstance() {

            return new FacebookFacebook([
              'app_id' => $this->app_id, // here i am not able to access InitialSetUp' app id 
                'app_secret' => $this->app_secret,
                'default_graph_version' => $this->default_graph_version,
     ]);
    }

以上是关于如何在静态方法中访问类变量的主要内容,如果未能解决你的问题,请参考以下文章

如何访问在mapreduce中扩展reducer的静态内部类中的静态变量?

如何在同一个类的静态方法中访问类的受保护变量?

在java中,为啥类实例也能访问静态域?

JNI/NDK开发指南——C/C++访问Java实例变量和静态变量

JAVA 静态方法不能访问直接

MFC中静态成员函数调用其他类的非静态变量