php - PHP 中 C++ 的虚函数相当于什么?

标签 php virtual abstract

抽象函数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
}

请注意,如果上面示例中的变量 fBar*Bar 类型,则 Foo::baz() 是虚拟的还是不是虚拟的,因为预期的类型是已知的(程序员明确提供它)

关于php - PHP 中 C++ 的虚函数相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487705/

相关文章:

c++ - 在 C++ 中调用函数(或虚函数)是一个 coSTLy 操作

memory - 虚拟内存

java - 为接口(interface)方法指定抽象或不指定有什么区别?

java - 从两个不同的接口(interface)调用相同的方法名称 - Java

php - DataTables - 使用搜索栏时出现无效的 JSON 消息

javascript - 在多选中获取值

c++ - Windows中是否有任何内存虚拟文件API?

java - ClientSessionEvent 上的 AbstractMethodError 和 "Missing permission to control media"

php - AdminLTE-3 激活侧边导航栏

PHPMailer - SMTP 错误 : Password command failed when send mail from my server