【问题标题】:get_called_class() $this objectget_call_class() $this 对象
【发布时间】:2018-06-23 21:56:05
【问题描述】:

如何获取调用当前函数的那个​​类的对象$this

class a extends zebra {
  function xyz() {
     ...
     b::somestaticmethod();
  }
}

class b {
  public static function somestaticmethod() {
    $callerObj = get_called_class();
  }
}

函数get_called_class() 以字符串格式获取调用类的名称。我正在寻找的是,有没有一种方法可以从调用类的上下文中获取对象 ($this),就像将 $this 作为以下参数传递时会发生的情况一样。

b::somestaticmethod($this);

为什么?

我计划在somestaticmethod() 方法上实现多态行为,它将检查调用类并基于该类的ancestor 进一步指导逻辑。

【问题讨论】:

  • 澄清一下,您不仅想要类名,还想要被调用类的实际对象?
  • 是的,这正是我正在寻找的。 ....具有所有继承和一切的整个对象,实际上没有将它作为参数传递。
  • 我不确定这样的事情是否存在,你为什么不把$this作为参数传递呢?
  • 是的,我目前已经按照您的建议实现了它,但是后来我正在寻找一种方法来独立获取对象而无需传递对象,而(手动传递对象)不需要给我一个具体的保证,就是 $this 被传递了,而不是其他一些对象。就像你可以从调用类传递类名时为什么使用get_called_class() 的类比:) 希望你明白我的意思。
  • 这是我唯一能找到的其他东西:stackoverflow.com/questions/1093101/… - 他们似乎都在传递参数,我一眼就能看出。

标签: php polymorphism


【解决方案1】:

反射似乎适用于继承和静态类属性

<?php

class a {
  public static function x() {
    $callerObj = get_called_class();
    return new ReflectionClass($callerObj); 
  }
}

class b extends a {
    public static $y = [0, 1, 2];

    public static function z() {
        return parent::x()->getProperty('y')->getValue();
    }
}

print_r(b::z());
array_push(b::$y, 3);
print_r(b::z());

【讨论】:

    猜你喜欢
    • 2011-03-30
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2021-08-20
    相关资源
    最近更新 更多