【问题标题】:Call static variable from a class that's a dependency of another class?从一个依赖于另一个类的类中调用静态变量?
【发布时间】:2014-11-25 21:26:02
【问题描述】:

参加以下测试课程:

class A {
    public static $number = 1;
}

class B {
    protected $a;

    public function __construct(A $a) {
        $this->a = $a;
    }

    public function getStatic() {
        echo $this->a::$number;
    }
}

$b = new B(new A);
$b->getStatic();

应该返回 1?我不确定,我试图在一个类作为另一个类的依赖项注入后访问一个静态变量。

原因是,我有一个被异步调用 x 次的类,但它需要一个全局静态变量来更新 10 个类实例。我不需要相同变量的 10 个实例。

假设有一个静态变量,它被每个类更新并保持一个变量。它不是每个类一个迭代器。

我做错了吗?我遇到了可怕的语法错误,意外的 '::' (T_PAAMAYIM_NEKUDOTAYIM)

【问题讨论】:

    标签: php class static scope


    【解决方案1】:

    在类而不是对象上调用静态。

    class A {
            public static $number = 1;
    }
    
    class B {
            protected $a;
    
                public function __construct(A $a) {
                    $this->a = $a;
                }
    
                public function getStatic() {
                    $class = get_class($this->a);
                    echo $class::$number
                }
    }
    
    $b = new B(new A);
    $b->getStatic();
    

    或者在A类中使用方法

    class A {
            public static $number = 1;
    
            public function getNumber()
            {
                return static::$number;
            }
    }
    
    class B {
            protected $a;
    
                public function __construct(A $a) {
                    $this->a = $a;
                }
    
                public function getStatic() {
                    echo $this->a->getNumber();
                }
    }
    
    $b = new B(new A);
    $b->getStatic();
    

    我更喜欢稍后。

    【讨论】:

    • 谢谢。这是这个问题的正确答案。但是我相信我的问题与此无关,但对于有此问题的任何人来说,这是要走的路。
    【解决方案2】:

    您不必创建对象来访问静态属性或方法。

    仅从 B 类访问/回显 A::number 不起作用?

    【讨论】:

    • 如果您想发表评论,请提高您的声誉。如果您想发布答案,请使其看起来如此。不要因为低代表而发布 cmets 作为答案 - 你的声誉最终会更低
    猜你喜欢
    • 2011-05-03
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2015-10-04
    相关资源
    最近更新 更多