(何时)我应该在PHP中使用类型提示?

Iva*_*tov 23 php coding-style

我无法理解PHP作者添加类型提示的动机.在它出现之前我很高兴地活着.然后,当它被添加到PHP 5时,我开始在任何地方指定类型.现在我认为这是一个坏主意,只要鸭子打字可以确保类之间的最小耦合,并利用代码模块化和重用.

感觉就像类型提示将语言分成两种方言:有些人用静态语言风格编写代码,有提示,有些人则坚持使用良好的旧动态语言模型.还是不是"全有或全无"的情况?在适当的时候,我应该以某种方式混合这两种风格吗?

Mar*_*rio 35

这不是静态与动态类型,PHP仍然是动态的.这是关于接口的合同.如果您知道一个函数需要一个数组作为其参数之一,请在函数定义中强制它.我更喜欢快速失败,而不是稍后在函数中出错.

(另请注意,您无法为bool,int,string,float指定类型提示,这在动态上下文中是有意义的.)

  • 我不知道,PHP正在增长(OOP).复杂数据类型的严格接口对我来说很有意义. (4认同)
  • 最终有一点需要检查你得到的东西是否真的是你期望的东西.Typehinting允许在函数定义中执行此操作. (3认同)
  • 对,我同意.我只是觉得所有严格的合同都与最初的鸭式语言有些陌生.PHP已经足够丑陋,类型提示使它看起来更像是一堆无关的功能. (2认同)
  • 此外,你可以充分利用这两个世界,在重要的地方定义严格性,并保持小动态. (2认同)

sou*_*rge 16

只要函数中的代码肯定依赖于传递参数的类型,就应该使用类型提示.无论如何代码都会生成错误,但类型提示会为您提供更好的错误消息.

  • 在这种情况下,为您的对象创建一个接口,该接口将实现它,并使用该接口名称键入提示您的函数.坚定的合同. (5认同)

Ala*_*orm 12

PHP小组添加类型提示的动机是为那些习惯于Java风格的OOP提供另一个功能,让平台更熟悉,更舒适,更有吸引力.反过来,这将使PHP更加"企业就绪",这将有助于Zend的核心业务.

除了营销,它确实有其用途.如果您正在编写一个以特定方式对参数进行操作的方法,如果该参数是其他方式,则会导致意外(通常是静默)失败,那么使用类型提示可确保代码在开发期间中断,而不是在生产中中断.


Ion*_*tan 5

如果您决定使用接口而不是具体或抽象类来进行类型提示.原因很简单,PHP不允许多重继承,但允许实现多个接口.因此,如果有人试图使用你的库,那么实现你的界面就不会有困难了,相反,他必须扩展你的抽象/具体类,因为他已经扩展了另一个.