【问题标题】:accessing $this in extended class using namespace使用命名空间访问扩展类中的 $this
【发布时间】:2014-05-11 14:21:16
【问题描述】:

B.php:

class B extends A {
    function foo() {
        $this->get['id'];
    }
}

C.php:

namespace NAME;
class C extends B {
    function foo() {
        $b = new \B();
        $b->get['id'] = $params['userToken'];
    }
}

以上方法可行,但我如何访问 $this 而不是创建B 的新实例?

如果我尝试这样访问它:

namespace NAME;
class C extends B {
    function foo() {
        $this->get['id'] = $params['userToken'];
    }
}

它返回错误:Using $this when not in object context。 $this 是protected,但由于它 C 正在扩展 B,它不应该引起问题,如果出现问题,也不应该返回该错误。

【问题讨论】:

  • 由于C 扩展了B,你不应该实例化B。如果你需要打电话给父母(B)foo(),在C::foo()里面做parent::foo()
  • @onetrickpony 做 $this->get 会导致错误“在不在对象上下文中使用 $this...”
  • 你如何调用你的C->foo()函数C::foo()
  • @jeroen call_user_func() 实际上
  • @MichaelBerkowski 但我不想访问 foo() 我想基本上从 C 中做 $this->get['id'] 就像在 B 中所做的那样

标签: php class namespaces this extend


【解决方案1】:

您的最后一段代码可以工作,但是当您使用call_user_func() 调用使用$this 的方法时,您需要传递一个实例而不是类名,即

call_user_func([new C, 'foo']);

【讨论】:

  • 很抱歉没有发布 call_user_func(),代码是别人的,不认为它会影响它,但现在有意义。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2014-06-16
  • 2023-04-02
  • 1970-01-01
  • 2012-01-08
相关资源
最近更新 更多