PHP类型提示不支持标量变量[1],如int或string

但是,我们发现在连续集成期间注释函数中的类型(int或string)以发现错误仍然非常有用,例如:

目前我用的方法就像

function foo($s) {

//assert( is_string($s), 'not a string' );

...

}

在单元测试和开发模式期间,断言将被取消注释以发现潜在的错误.

我在寻找是否有更好的方法来做到这一点.

解决方法:

一个有趣而优雅的解决方案是AOP.您可以从代码中删除所有断言并开始使用这样的标准phpdoc:

/**

* @param string $s

*/

function foo($s) {

...

}

从他们的文件:

…with the help of 10-20 lines of code we can intercept all the

public, protected and static methods in all the classes of

application…

您可以使用它来动态拦截所有方法,读取agruments,获取ReflectionMethod对象,解析类型相关的注释并执行运行时检查.这听起来很复杂,但这很容易做到.

结果:在每个包含的PHP文件的测试过程中会占用一些运行时资源(不多),但对于你的代码库来说它看起来会更好(更干净).

php 单元测试 静态类,可选的PHP类型提示/检查单元测试或静态分析?相关推荐

  1. 全面理解Python中的类型提示(Type Hints)

    众所周知,Python 是动态类型语言,运行时不需要指定变量类型.这一点是不会改变的,但是2015年9月创始人 Guido van Rossum 在 Python 3.5 引入了一个类型系统,允许开发 ...

  2. 第八章 函数中的类型提示

    应该强调的是,Python 仍将是一种动态类型的语言,即使按照惯例,作者也不希望强制类型提示 --Guido van Rossum, Jukka Lehtosalo, and Łukasz Langa ...

  3. python 功能 代码_让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  4. python语言必背代码-让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  5. python代码-让你的Python代码实现类型提示功能

    Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示.为了解决这个问题,Python 3.6 新增了几个特性PE ...

  6. php 类示例,PHP类实例教程(二十二):类型提示

    PHP是弱类型语言,向方法传递参数时候也不太区分类型.这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免.没有类型提示很危险. class Normal ...

  7. python应用程序类型_python – 类型提示条件可变参数应用程序

    我试图键入提示构造函数的部分应用程序,一旦提供"tag"实例,它就会被完全应用.这是通过包装类实现的,包装类存储构造函数和任何部分应用的参数.由于包装器适用于多种类型,因此必须采用 ...

  8. php 显示对像编码,PHP面向对象之旅:类型提示

    PHP是弱类型语言,向方法传递参数时候也不太区分类型.这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免. 没有类型提示很危险 下面的代码可能会出现问题 ...

  9. python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网

    checktypes软件包 用于创建实用程序类的库,为类型提供了良好的抽象 检查和数据验证. 基本示例 创建 面向对象的api 在要继承的CheckType旁边选择一个基类并定义一个predicate ...

最新文章

  1. Lesson 6.动态计算图与梯度下降入门
  2. 为啥八位的计算机可以用补码表示-128
  3. 集群机器时间同步设置
  4. UVAlive 6131 dp+斜率优化
  5. MySQL工作笔记-解决导入外部sql中文乱码问题
  6. JavaScript之arguments属性
  7. mysql innodb 写锁_MySQL-InnoDB-锁
  8. 降低站长成本 推荐8个免费或低廉小型建站工具
  9. opencv 修改 读取路径_opencv中读取图像的绝对路径问题
  10. topcoder srm 440 div1
  11. android 没有menu菜单键,android之onCreateOptionsMenu失效,按菜单键无反应
  12. 2022 最新 Memcached 面试题
  13. 人工智能就业前景越来越严峻了,你还在坚持吗?
  14. 鲁大师12月新机性能/流畅榜:小米系包揽性能榜前三,流畅榜上限再突破!
  15. R语言逻辑回归的预测概率怎么算
  16. 无线蓝牙耳机哪个价位性价比最高?500以内最好的蓝牙耳机推荐
  17. comsol-亥姆霍兹线圈
  18. uniapp Modal自定义弹窗
  19. electron-egg使用
  20. mc服务器维护成本,服务器不是随便开?运营成本才值几个钱,MC玩家这种误解从何而来...

热门文章

  1. xilinx SoC学习笔记之PetaLinux
  2. caffe使用过程中遇到的问题和解决办法
  3. 从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个
  4. centos -bash: vim: command not found
  5. 基于移动端Reactive Native轮播组件的应用与开发详解
  6. ×××技术在ATM机无线组网中的应用
  7. Symantec防病毒企业版10.1部署方法一
  8. WebBrowser控件打开https站点
  9. SourceTree 的初次使用的两个小问题
  10. Spring MVC - Hello World示例