发布的巴尼Laurance在07年6月,2019年

PHP的诗篇:很难发音,容易类型

我记得在之前的一个同事工作重复咒语”程序接口,而不是实现”。

这听起来像很好的建议,但是我感觉有点抽象,因为PHP变量没有类型。变量的值类型,但是一个对象的类型在内存中从来就不是一个接口,它总是一个类。

我想,我可以试着记住一个接口编码时,唯一的真正考验是我的代码是否工作当我运行它,此时PHP将允许我调用任何函数可以在类。它不会知道我已经在我的脑海里当我在编程接口。

从Vim的理解仅仅是在我换,我是使用没有任何插件,PHPStorm。一旦你使用PHPStorm变量类型,而不是PHP引擎在PHPStorm对文件的理解。现在一个变量可以有一个接口类型,和PHPStorm大声抱怨如果我试图调用一个函数不存在的界面。换句话说,我是在PHP中使用静态分析第一次接触静态类型除了PHP的动态类型。

但即使PhpStorm仍有几次当我犯拼写错误在一个变量中,没有注意到PhpStorm抱怨并找到消息的致命错误:非调用成员函数一些天后在服务器日志,或者犯一些错误,可能是静态检查,之后才发现。

所以我认为一个IDE,静态分析是极其宝贵的,我不认为这就够了。有几个独立的静态分析工具用于PHP, MyBuilder我们一直使用诗篇,从我们公司IAC的妹妹Vimeo在今年的一个新项目开始我们的代码,以及我们的内部资金库新项目取决于。

诗篇是由马修·布朗和他的同事们在Vimeo帮助他们在现有的大型代码库。当你引入一个新的质量检查工具现有的代码库的抱怨可能会发现很多东西。从一个空的代码没有错误1,一个新项目是一个很好的机会介绍诗篇。

作为一个团队我们期望每个把请求传递詹金斯构建在合并之前,和诗篇将确保我们没有通过建立如果发现任何错误。就我个人而言,我觉得这让我知道有更多的舒适许多类型的问题我不会不小心添加到我们的代码库。

当然静态分析代码评审或测试是必不可少的,但我认为它补充。有小点复习甚至不通过单元测试的代码,我建议有类似的小点审查,或运行测试代码静态analyszer已经发现了一个问题。一旦你知道测试通过,你不需要的问题,尽管审查,而你可以投入精力更有趣的问题,修改代码是否有用和方便理解和改变未来。

同样一旦你知道静态分析已经通过,你可以检查学习什么样的东西,你不用质疑的类型是准确的,而不是你应该能够找到更多有用的问题要问。

诗篇会读类型从正常docblocs以及PHP类型声明,在docblocks理解几种类型的类型(还),PHP本身并不理解,包括工会、泛型、对象数组和其他人。当我们开始使用打印稿在前端,有一个更复杂的类型系统在PHP中也非常受欢迎。

当我习惯了诗篇的类型系统,我发现自己越来越愿意依赖它,让它代替部分在运行时检查——为什么检查一些静态分析说不会发生?这里有一个锁定的风险,因为一旦一个代码库开始依靠静态分析变得危险改变它,而不是运行分析,但有时我认为这是值得接受这种风险,诗篇。

例如,我们有一个类,它取决于Symfony的UserProviderInterface,和另一个类中实现它。自dockblock UserProviderInterface # loadUserByUsername说它返回一个用户界面对象,我很高兴删除检查空返回值在我们的代码中,自信诗篇不会允许我们从我们的实现返回null。

诗篇发展迅速,我认为它很快就会更多的在PHP社区广为人知,很大程度上是因为马可Pivetta aka的工作Ocramius最近一直在推动它。教义集合是最近带注释的泛型类型信息的诗篇,Ocramius发布库作者使用的工具在项目和诗篇上自动运行安装阻止人们使用他们错了和塞巴斯蒂安·伯格曼发布了版本的PHPUnit)使诗篇更有用的注释。我也泛型类型注释添加到jms /序列化器,贡献一些改进诗篇。

所以我强烈建议添加一个静态分析工具构建管道,虽然我还没试过替代品诗篇似乎是一个不错的选择。你可以在您的浏览器中测试出来,并将它添加到您的构建可能这么简单:

美元作曲家要求——开发vimeo /诗篇美元/供应商/ bin /诗篇——初始化美元回声”。/供应商/ bin /诗篇”> >test.sh

  1. 除非你认为失踪的“必备”功能是一个错误,在这种情况下,你可以考虑编写一个新程序是一样的调试一个空目录。

工作在MyBuilder和Instapro

我们需要有经验的软件工程师谁爱他们的手艺,想要分享他们辛苦赚来的知识。

查看职位空缺
评论的Disqus