首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP OOP Multicall

PHP OOP Multicall
EN

Stack Overflow用户
提问于 2012-04-30 19:23:24
回答 5查看 80关注 0票数 3

我在一些库中看到过类似这样的东西:

代码语言:javascript
复制
$this->getResponse()->setRedirect($returnUrl);

这个“多层调用”是如何完成的,或者,类应该如何构建才能做这样的事情?

我认为:

代码语言:javascript
复制
class greeting
{
    public function hi()
    {
        public function howAreYou()
        {
            echo 'How are you?';
        }
    }
}
$greet = new greeting;
$greet->hi()->howAreYou();

但我认为它不是很好,我最好使用像扩展这样的东西,但我不知道。感谢您的建议。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-30 19:26:41

如果这是一个调用自身的类实例,那么它被称为“方法链接”。

在PHP中,可以通过使用return $this来完成;请注意,这是一种与类继承非常不同的机制-将它们视为可互换并没有实际意义。

另请参阅:https://stackoverflow.com/search?q=method+chaining+php

票数 4
EN

Stack Overflow用户

发布于 2012-04-30 19:26:27

getResponse()正在返回一个具有setRedirect()方法的类实例。

示例:

代码语言:javascript
复制
class Foo
{
    public function getResponse()
    {
        $redirect = new Bar();
        return $redirect;
    }
}

class Bar
{
    public function setRedirect($returnUrl)
    {
        // do something
    }
}

$foo = new Foo();

$foo->getResponse()->setRedirect("returnUrl");
票数 3
EN

Stack Overflow用户

发布于 2012-04-30 19:27:03

不是的。

你所要做的就是在每个函数的末尾返回self。

因此,您的示例应该是like>

代码语言:javascript
复制
class greeting
{
    public function hi()
    {
        echo "Hi";

        return $this;
    }

    public function howAreYou()
    {
        echo 'How are you?';

        return $this;
    }
}

$greet = new greeting;
$greet->hi()->howAreYou();

或者甚至是:

代码语言:javascript
复制
$greet->hi()->howAreYou()->hi()->howAreYou();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10382864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档