【问题标题】:What's the difference between a Contract in Laravel and an Interface in PHP?Laravel 中的 Contract 和 PHP 中的 Interface 有什么区别?
【发布时间】:2016-03-08 10:10:42
【问题描述】:

据我所知,Laravel 将其扩展的接口称为合同,因为它们被 Laravel 使用。但这似乎有点像循环推理。仅仅因为您的项目使用它而更改现有 PHP 功能的术语并没有增加任何价值。

还有别的吗?为标准 PHP 功能创造一个新术语背后的逻辑是什么?或者接口中是否存在合约的某些功能?

编辑:澄清一下,在我对Thomas's post的评论中解释说,文档中合同作为专有名词的使用让我感到困惑。

【问题讨论】:

    标签: laravel interface laravel-5.1


    【解决方案1】:

    简短描述:契约是一个用于接口的术语,也用于抽象类。

    【讨论】:

      【解决方案2】:

      正如其他人所说,这只是接口的一个花哨的词,但我认为 Taylor 做出这个决定是为了让它更加个性化。

      我所说的个人的意思是接口它是编程语言中一个非常广泛/通用的词,你有你的接口,你可能正在使用的库有它们自己的接口等等。

      您只是假设为 Laravel 接口的合同,它就像属于 this repo 的所有接口的包装器或别名。

      【讨论】:

        【解决方案3】:

        “合同”并不是 Taylor 创造的新术语。这是程序员非常常用的术语。

        接口是契约,但契约不一定是接口。简而言之,接口定义了类必须实现的协定。

        抽象类也是契约。不同之处在于抽象类可以提供实际的实现、状态等,因此(在某种意义上)它是一个更严格的契约。

        另一个关键区别是子类只能扩展 1 个抽象类,但它可以实现多个接口。

        所以基本上,“合同”不是一个新的命名约定。这是 Taylor 常用的术语。

        【讨论】:

        【解决方案4】:

        这只是一个很好的词来描述使用接口的想法。

        Laravel 合约只是 PHP 接口,因此它们不提供任何其他功能。

        您可以在文档http://laravel.com/docs/5.1/contracts中阅读有关此主题的更多信息

        【讨论】:

          猜你喜欢
          • 2010-10-29
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-20
          • 2015-04-12
          • 2016-10-13
          相关资源
          最近更新 更多