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()?