首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从当前类调用方法的实现?

如何从当前类调用方法的实现?
EN

Stack Overflow用户
提问于 2017-03-20 21:02:36
回答 2查看 50关注 0票数 0

我有一个像这样的课程

代码语言:javascript
复制
class Base
{
    public function greet()
    {
        print "hello";
    }

    public function speak()
    {
        $this->greet();
    }
}

和一个类,比如

代码语言:javascript
复制
class Extension extends Base
{
    public function greet()
    {
        print "goodbye";
    }
}

我有这样的代码:

代码语言:javascript
复制
$extension = new Extension();

//Situation One
$extension->speak(); //This says goodbye

//Situation Two
$extension->greet(); //This says goodbye

我想让情况一说你好。我很高兴第二种情况能说再见。

有没有什么我可以做的(大概是在that ()的实现中)来表明必须在Base中使用greet()的实现?

(换句话说,Base很乐意让扩展类覆盖greet(),但当calls ()调用greet()时,它希望它使用Base中定义的已知行为,而不是其他地方定义的未知行为。)

EN

回答 2

Stack Overflow用户

发布于 2017-03-20 21:07:05

由于您希望在不同的情况下实现不同的功能,因此需要创建两个类实现。

代码语言:javascript
复制
class Base
{
    public function greet()
    {
        print NULL;
    }

    public function speak()
    {
        this->greet();
    }
}

class Goodbye extends Base
{
    public function greet()
    {
        print "goodbye";
    }
}

class Hello extends Base
{
    public function greet()
    {
        print "hello";
    }
}

一种情况。

代码语言:javascript
复制
$hello = new Hello();
$hello->greet();

另一种情况。

代码语言:javascript
复制
$goodbye = new Goodbye();
$goodby->greet();
票数 0
EN

Stack Overflow用户

发布于 2017-03-20 21:29:14

这是向您介绍Interfaces的最佳场景。在这种特殊情况下,您将需要以下接口:

代码语言:javascript
复制
interface MyClassInterface
{
    public function greet();

    public function speak();
}

如果你不想覆盖它,那就不要在speak方法中调用greet:

代码语言:javascript
复制
abstract class Base
{
    public function speak()
    {
        print "hello";
    }
}

class Extension extends Base implements MyClassInterface
{
    public function greet()
    {
        print "goodbye";
    }
}

$extension = new Extension();

// Situation One
$extension->speak(); // This says hello

// Situation Two
$extension->greet(); // This says goodbye
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42904330

复制
相关文章

相似问题

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