关于php:类中接口的用途


purpose of interface in classes

本问题已经有最佳答案,请猛点这里访问。

编写类时接口的用途是什么?

这是我在网上看到的一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
interface Chargeable {
    public function getPrice();
}

class Employee implements Chargeable {
    protected $price;

    public function getPrice() {
        return $this->price;
    }
}

$product = new Employee();

?>


以下是我如何学习和理解接口的方法之一。

想象一下这个场景:

1
2
3
4
5
6
7
8
abstract class Plane {
    public function openDoors();
}


interface Fliers {
    public function fly();
}

现在让我们使用它们:

1
2
3
4
5
6
7
8
9
class Boeing747 extends Plane implements Fliers {
    public function fly() {
        // some stuff
    }

    public function openDoors() {
        // do something
    }
}

还有:

1
2
3
4
5
class Tweety implements Fliers{
    public function fly() {
        // some stuff
    }
}

Boeing747是一架可以飞的飞机,Tweety是一只比可以飞的鸟,但是Tweety"打开门"是没有意义的。

重点是接口可以由不同类型的对象实现,但类不能实现。如你所见,Boeing747和Tweety没有任何共同点,除了两者都能飞。


接口是面向对象编程中启用多态性的概念。基本上,一个接口就像一个契约,通过这个契约,实现它的类同意提供某些功能,这样它们就可以像其他使用接口的类一样被使用。

您的示例显示的类保证它们具有可用的getPrice方法。然后,您可以编写代码,利用具有此方法的对象,而不必担心它是什么类型的类。


我现在正在努力摸索这个问题(我想我读的是同一本书,和《行动》…)。

在我看来,接口只是对实现接口的类执行"契约"义务,以实现出现在接口中的函数/属性。然而,实现接口的类/对象是否可以以一种独特的方式实现,因为没有定义实现?

没有实际的继承关系,是吗?


在具有多个继承而不是接口的语言中,您拥有抽象类。在PHP中没有多重继承,所以您有接口。一个类可以实现各种接口。唯一的一点是要确保类具有某些方法集。


接口允许您将接口与实现分离。当您希望在代码中具有正交性和其他特性时,这非常方便。

基本上,您将能够创建接受Chargeable的函数,并且只要它实现Chargeable就能够传递其中的任何对象。如果您需要更改Employee类,这允许您在道路上灵活。它还允许您的方法接受任何"收费"的对象。


首先,接口结构向为外部世界通信而实现的类提供接口。简单的例子就是电视。电视是一门课,它上面的按钮是接口。

使用界面高级:

1-java不支持多重继承。如果我们想从不同的类中添加两个不同的方法,我们就不能(扩展类A、类B)实现A、B没有问题。

2-另一个ADV是一个安全性和灵活性的例子,可以给出更具体的例子。如果我们希望类中的某些方法不可访问,我们如何才能做到这一点?多态性+接口我们可以做到如果我们不想走路,那么就不可能达到吠叫的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
abstract class Animal {
    String name;
    int age;

    public Animal(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

}

class Dog extends Animal implements Run {

    public Dog(String name, int age) {
        super(name, age);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

    }

    public void bark() {

    }

}

class Cat extends Animal implements Climb {

    public Cat(String name, int age) {
        super(name, age);

    }

    @Override
    public void climb() {
        // TODO Auto-generated method stub

    }

    public void walk() {

    }

}

public class Main {

    public static void main(String[] args) {

        // if we want that some of methods of the class are not reachable how
        // can we do that?
        // polymorphism + interface we can do that
        // for example if we do not want walk and bark methods should be
        // unreachable

        Climb cat = new Cat("boncuk", 5);
        Run dog = new Dog("karabas", 7);

        // see we cannot reach the method walk() or bark()
        dog.walk(); // will give an error. since there is no such a method in the interface.

    }

}}

    enter code here


让我举个例子来理解这种类型的类的模糊性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public interface transport{
public double getSpeed(){return(0/*the speed*/);}
public void setSpeed(){return(0/*the speed*/);}


}  
class car extend transport{
//implementation of transport interface
public double getSpeed(){return(speed/*the speed*/);}
public void setSpeed(){speed=250;}
}
class train extend transport{
//implementation of transport interface
....

}

class plane extend transport{
//implementation of transport interface
....
}

所以接口类是一般的概念。