【问题标题】:PHP Class member access on instantiation实例化时的 PHP 类成员访问
【发布时间】:2012-03-04 00:41:22
【问题描述】:

我对 PHP 5.4 的新语法有疑问 我的代码在实例化时具有成员访问权限

$oClass = (new Foo)->bar();
$oClass->bar2();

我收到这个错误

致命错误:在非对象上调用成员函数 bar2()

为什么?

编辑:我在 Foo::bar() 方法中添加了return $this;,现在它可以工作了

【问题讨论】:

  • (new Foo)->bar() 的评估结果是什么?
  • 请接受您的同行在本网站上提供的以下答案,而不是编辑您的问题。这也会将您的问题标记为已解决。

标签: php oop


【解决方案1】:

我猜你认为$oClass 将包含一个对象。不是这种情况;它包含函数bar() 的结果。

如果您想访问bar2(),您需要照常执行以下操作:

$oClass = new Foo;
$oClass->bar();
$oClass->bar2();

实例化时的类成员访问适用于当您只需要简要访问对象的单个成员,然后您不再需要该对象时。

编辑:
我可能忽略了一些东西。

考虑以下代码:

class Test {
    public function foo() {
        return $this;
    }

    public function bar() {
        return 'oh hai';
    }
}

$t = (new Test)->foo();

print $t->bar();

在这种情况下,您仍然可以访问该对象,因为函数 foo() 返回 $this 并且您正在存储它,维护对对象的引用。

如果你真的想,你也可以像这样链接方法:

print (new Test)->foo()->bar();

【讨论】:

    【解决方案2】:

    这个怎么样?

    ($oClass = new Foo)->bar();
    $oClass->bar2();
    

    【讨论】:

    • 解析错误。您应该先尝试您的代码,然后再将其作为答案。
    猜你喜欢
    • 2014-05-18
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多