Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过接口强制属性_Php_Interface_Abstract Class - Fatal编程技术网

PHP通过接口强制属性

PHP通过接口强制属性,php,interface,abstract-class,Php,Interface,Abstract Class,我在github上经常看到这种情况,但我看不到这些关系中接口的优点,甚至看不到接口的使用 情境:一个库有一个基类Article,它被声明为抽象类,并且应该被扩展。为什么它实现了ArticleInterface,基本上是: interface ArticleInterface { // some getter // some setter // getter... // setter.... // etc... } 我看不到此设置中使用接

我在github上经常看到这种情况,但我看不到这些关系中接口的优点,甚至看不到接口的使用

情境:一个库有一个基类
Article
,它被声明为抽象类,并且应该被扩展。为什么它实现了
ArticleInterface
,基本上是:

interface ArticleInterface
{
     // some getter

     // some setter

     // getter...

     // setter....

     // etc...
}

我看不到此设置中使用接口?抽象类本身还不够,因为它已经定义了那些getter/setter和属性(它实现了接口)。接口在这里所做的唯一一件事就是强制属性声明,这不是它的重点,对吗?

接口使类更加灵活。最后,它确实是您想要定义的接口。抽象类允许您定义类接口的一些重要部分以及(一些)实现。接口甚至更抽象,只定义必要功能的接口,将实现完全留给实现者

您应该这样考虑:接口是定义,抽象类只是它的一个示例实现。如果此框架实现适合您的目的,请扩展并使用它。否则,如果您不能或不想继承特定的类,则可以按任何方式实现该接口。您不必扩展特定的类,您可以使用自己的类层次结构


有关为什么应该在接口中思考以及为什么解耦非常重要的更多信息,请阅读

接口使类更加灵活。最后,它确实是您想要定义的接口。抽象类允许您定义类接口的一些重要部分以及(一些)实现。接口甚至更抽象,只定义必要功能的接口,将实现完全留给实现者

您应该这样考虑:接口是定义,抽象类只是它的一个示例实现。如果此框架实现适合您的目的,请扩展并使用它。否则,如果您不能或不想继承特定的类,则可以按任何方式实现该接口。您不必扩展特定的类,您可以使用自己的类层次结构


有关为什么应该在接口中思考以及为什么解耦非常重要的更多信息,请阅读

接口使一个类可以实现多组功能(即多个接口),而在PHP中不可能实现多重继承。接口使类可以实现多组功能(即多个接口),而在PHP中不可能实现多重继承。他们使你的等级制度更加灵活。有时你只需要有人帮你写东西。回答得好,文章也很棒。尽管这主要是关于你所说的“面向类编程”的缺点,但我明白了。脱钩。我必须承认,我真的很难做到这一点。我总是倾向于在我的代码中使用硬编码的依赖项,因为它似乎更容易编写,但过了一段时间,我很后悔。有时你只需要有人把东西写下来。回答得好,文章也很棒。尽管这主要是关于你所说的“面向类编程”的缺点,但我明白了。脱钩。我必须承认,我真的很难做到这一点。我总是倾向于在我的代码中使用硬编码的依赖项,因为它似乎更容易编写,但过了一段时间,我后悔了。