【问题标题】:Access to static variable belongs to class which is inside other class对静态变量的访问属于其他类中的类
【发布时间】:2023-03-06 15:21:01
【问题描述】:

我有两节课。 B类有字段:A类的对象(组成关系)。需要获取A类的静态变量。但是代码中存在一些问题:

<?php
class A {
    public static $var = 'a';
}

class B {
    private $object;

    private function staticAccess($className) {
        $this->object = $className;
    }

    public function __construct() {
        $this->staticAccess('A');
        // This is wrong syntax:
        //$a = $this->object::$var;

        // Syntax which works but unconvenient
        $objA = $this->object;
        $a = $objA::$var;
    }
}

如您所见,有一个解决方案。但是有必要多写一行。是否可以一条线解决一个任务?

感谢您的帮助!

【问题讨论】:

    标签: php class static composition


    【解决方案1】:

    不可能在一行中完成(只是 PHP 的一个限制)。我建议添加一个您可以使用的函数,如下所示:

    public function getStaticVar($var) {
        $class = new ReflectionClass($this->object);
        $value = $class->getStaticPropertyValue($var);
    
        return $value;
    }
    

    使用反射库是在 PHP 中动态访问动态静态属性的唯一方法。

    【讨论】:

    • 使用反射是更好的解决方案?在我的解决方案中没有反射。但我建议反射更好,因为它使动态操作更清晰。
    • 反射允许您将其抽象为一个方法。您的语法可以工作,但不适用于变量属性名称。反射也更清晰:)
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 2016-07-15
    • 2011-03-05
    相关资源
    最近更新 更多