界面:php 与 java

interface: php vs java

我注意到 java 和 php 在接口上有一些非常不同的地方,当你在它们的接口中创建相同的方法时。

PHP:

interface Visitor 
{
    public function visit(Visitable $Visitable);
    public function visit(Visitable2 $Visitable2); // this is wrong in php.
}

Java:

interface Visitor 
{
    public double visit(Visitable Visitable);
    public double visit(Visitable2 Visitable2); // this is ok in java
}

您可以在 3:35 的 this video 上查看 java。

为什么 java 允许这样做? double 有什么作用? php?

中没有 double

Java实际上允许重载:这意味着你可以有一个同名但有两个不同签名的方法。

在Java的情况下,重载中有两个同名的方法visit

  1. 一个接受类型为 Visitable 的参数;
  2. 另一个Visitable2.

你不能在 PHP 中这样做,因为 PHP 不支持重载。

另请注意,在这种情况下,double(方法 return 类型)什么都不做。 return 类型单独 cannot be used 实现重载,因为 compiler/interpreter 无法知道在某些情况下绑定哪个实现。