当前位置: 首页 > 面试题库 >

如何在新创建的对象上链接方法?

夏才
2023-03-14
问题内容

我想知道是否有一种方法可以在PHP中新创建的对象上链接方法?

就像是:

class Foo {
    public function xyz() { ... return $this; }
}

$my_foo = new Foo()->xyz();

有人知道实现此目标的方法吗?


问题答案:

在PHP 5.4+中,解析器已被修改,因此您可以执行以下操作

(new Foo())->xyz();

用括号括起来的实例,并链接。

在PHP 5.4之前的版本中,当您使用

new Classname();

在语法上,您不能将方法调用链接到实例化。这是PHP 5.3语法的局限性。实例化对象后,就可以链接了。

我见过的一种解决该问题的方法是某种静态实例化方法。

class Foo
{
    public function xyz()
    {
        echo "Called","\n";
        return $this;
    }

    static public function instantiate()
    {
        return new self();
    }
}


$a = Foo::instantiate()->xyz();

通过将对new的调用包装在静态方法中,可以使用方法调用实例化一个类,然后可以自由地将其链接起来。



 类似资料:
  • 你知道吗?也许有更好的办法?

  • 我可以使用Powermock中的,但我想知道Spock有没有办法做到这一点。

  • Q.如果您在未链接到接口的抽象类中创建抽象方法,您是否仍然遵循编程到接口的原则? 我已经为我创建的所有UI类使用了接口;但是,考虑到接口的原因,我看不到与我想要创建的抽象方法和已经存在的接口的直接关联。 通常,我只会创建抽象方法并完成;但是,我想知道我是否违反了程序到接口的设计原则。 问:我应该为此创建另一个接口,还是继续使用抽象方法? 注意:这不是一个接口与抽象类的问题。 注意:我的基类更多的是

  • 我也用同样的结果尝试了这个视频中的建议。 最后一件事,我已经没有想法了:在Chrome开发者控制台,我看到创建失败,错误为400,这表明我需要更新白名单URL。我通过添加以下URL实现了这一点: 这个问题一直让我抓狂。我想我什么都试过了。让我想知道我是否需要在Firebase中重新创建我的应用程序。

  • 问题内容: 我有一个JpaRepository在Spring MVC应用程序中持久保存新创建的实体。这个实体看起来像这样(非常简化): 和版本实体: 我创建一个这样的翻译对象 其中11是从一开始就已经存在于数据库中的版本。请注意,我没有为ClientVersionDTO 设置和的值。 然后,我有一个持久化新对象的服务(我使用库将DTO转换为实体) 请注意我的评论“ t2.getVersion()返

  • 我编写了一个类,它读取整个文件并返回内容。