测试套件
OP代码没有任何单元测试,它将从中受益。这将有助于温和的读者更好地理解哪些URL在范围内,哪些不是。
规范
该代码没有详细说明规格。在审查背景中,我们发现一个模糊的描述关于从“给定URL”“检测”平台。我必须相信作者已经想到了一些生成过程生成适合作为输入提供给parse()的URL。也就是说,调用方有义务确保URL在传递之前符合某些规范。
OP没有提供关于该规范是什么的太多指导。如果我们将此代码交给QA工程师并要求进行测试,现在还不清楚什么是合适的测试代码。
注释与代码
//邀请链接不能以http开头if(!str_contains($scheme,'http')){
注释描述了一个规则,代码实现了一个不同的规则。
请让代码检查前缀$scheme的。
因此,方案可能会丢失,这使我们生成
PHP警告:未定义的数组键“scheme”
公共API的设计
这又回到了有一个规范。parse函数没有详细说明它承诺返回给调用方的内容。它有四条返回路径,可以提供以下值
“电报”
“ftp”
''
“什么事”
“交流”
(用于'https://www.cardiff.ac.uk网址/')
不清楚调用方应该如何处理返回值源于空的查找结果,甚至不知道如何识别这样的结果。请写一个PhpDoc公司描述此功能的注释承诺要执行的操作。
偶然匹配
常量URL_MAPPINGS=['tg'=>自我::TELEGRAM,
那把钥匙很短.
点,增加随机匹配无关URL的机会与Telegram无关。至少我们没有进行子字符串匹配,这是我最初的担忧,假设许多base64字符串都包含该bi-gram。
此外,这可能是来自SCHEME_MAPPINGS的copy-n-pasted吗,它根本不属于这里?
含糊的评论
//拆下最后一部分。它是gtldarray_pop($domainParts);
在最初的七个gTLD中,我愿意相信代码预期至少使用{.com网站
,.net文件
,.org网站
}.该评论使得域名像{.co公司
,.mobi(移动电话)
,.info(信息)
}或更多现代添加物已考虑。
我担心的一部分是。.co.uk(英国)
是用于分析的“顶层”,并且是否剥离.uk(英国)
会给我们带来误导.co公司
.规范将帮助我们回答这些问题。
尚不清楚为什么修剪()结果对调用方很重要,但这当然没有害处。