是抽象函数xxx
吗?
我刚刚做了一个测试,似乎表明私有(private)方法也是虚拟的?
class a {
private function test()
{
echo 1;
}
}
class b extends a {
private function test()
{
echo 2;
}
public function call()
{
$this->test();
}
}
$instance = new b;
$instance->call();
输出为2
最佳答案
在 PHP 中,所有非私有(private)函数都是虚函数,因此无需显式声明它们为虚函数。
将成员函数声明为abstract
仅意味着基类不能提供实现,但所有派生类都应该提供。将方法定义为抽象方法与在 C++ 中执行以下操作相同
virtual void foo() = 0;
这仅仅意味着派生类必须实现foo();
编辑:关于编辑过的问题
b::call()
无法访问 a::test()
。因此,在调用私有(private)函数时,只会调用调用它的类中的函数。
编辑: 关于评论:
(来自维基百科)
In object-oriented programming, a virtual function or virtual method is a function or method whose behaviour can be overridden within an inheriting class by a function with the same signature.
由于在 C++ 中明确说明您支付的费用的想法,您必须将函数声明为虚函数以允许派生类覆盖函数。
class Foo{
public:
void baz(){
std::cout << "Foo";
}
};
class Bar : public Foo{
public:
void baz(){
std::cout << "Bar";
}
};
int main(){
Foo* f = new Bar();
f->baz(); //baz is not virtual in Foo, so the output is Foo
}
将baz改为虚拟
class Foo{
public:
virtual void baz(){
std::cout << "Foo";
}
};
//Same Bar declaration
int main(){
Foo* f = new Bar();
f->baz(); //baz is virtual in Foo, so the output is Bar as it will call the derived function
}
请注意,如果上面示例中的变量 f
是 Bar*
或 Bar
类型,则 Foo::baz()
是虚拟的还是不是虚拟的,因为预期的类型是已知的(程序员明确提供它)
关于php - PHP 中 C++ 的虚函数相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487705/