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

Php 如何从当前类调用方法的实现?,php,class,oop,Php,Class,Oop,我有一门课 class Base { public function greet() { print "hello"; } public function speak() { $this->greet(); } } class Extension extends Base { public function greet() { print "goodbye"; } }

我有一门课

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

    public function speak()
    {
        $this->greet();
    }
}
class Extension extends Base
{
    public function greet()
    {
        print "goodbye";
    }
}
还有一个像

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

    public function speak()
    {
        $this->greet();
    }
}
class Extension extends Base
{
    public function greet()
    {
        print "goodbye";
    }
}
我有以下代码:

$extension = new Extension();

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

//Situation Two
$extension->greet(); //This says goodbye
我想在第一种情况下打个招呼。我很高兴第二种情况可以说再见

我能做些什么(可能是在speak()的实现中)来指示必须使用Base中的greet()实现吗


(换句话说,Base很乐意让扩展类重写greet(),但当speak()调用greet()时,它希望它使用在Base中定义的已知行为,而不是在别处定义的未知行为。)

因为您希望在不同的情况下使用不同的功能,所以创建两个类实现

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";
    }
}
一种情况

$hello = new Hello();
$hello->greet();
$goodbye = new Goodbye();
$goodby->greet();
另一种情况

$hello = new Hello();
$hello->greet();
$goodbye = new Goodbye();
$goodby->greet();

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

interface MyClassInterface
{
    public function greet();

    public function speak();
}
如果您不想覆盖它,请不要在speak方法中调用greet:

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

一切都很好,但不是php。使用美元
$
USdollar@Niklesh谢谢,最近PHP和JS之间的切换太多了。您的扩展没有实现MyClassInterface,因为它没有实现speak()?