微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

抽象类中的 get_class_vars() 返回错误的变量

如何解决抽象类中的 get_class_vars() 返回错误的变量

我编写了一堆扩展 PHP 抽象类的类。抽象类有变量,也有继承抽象类的类。

我想在抽象类中创建一个方法,它返回子类的所有类变量,但不必在每个子类中重新编码。

这个片段在子类中运行良好,以获取所有变量,来自抽象类和其他类的变量:

get_class_vars(get_class($this))

但是,如果我将此代码段移至抽象类,则不起作用。这是我所做的:

public function test($test)
{
    var_dump(get_class($test));
    var_dump(get_class_vars(get_class($test)));
}

这段代码正确返回了传入类的类名,但是get_class_vars()只返回了抽象类的变量,不管这里传入的是哪个类。

在这里做错了什么?

解决方法

<?php 
abstract class Entity
{
protected int $top;

public function test()
    {
        var_dump(get_called_class());
        var_dump(get_class_vars(get_called_class()));
    }
}

class Sub extends Entity
{
    public String $test; // CHANGED FROM PRIVATE TO PUBLIC!
}

$test = new Sub();
$test->test();

我找到了解决方案 - 这是一个“私人”问题。子类中的变量至少需要是受保护的变量才能从顶级类中看到。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。