全部的金沙上线的推荐全部的金沙上线的推荐

添加强强键入的过程是PHP代码库是一个很长的过程。标准应用程序将在平均为11 000个参数和返回金沙上线以添加​​,并且不计算属性(每个人都在PHP 7.4上,对右?)

绝大多数金沙上线的金沙上线已经在代码中。可以将它们推断出来读取来源,并检查使用和先决条件。这是静态分析工具的工作。

typehint. 的建议

这是来自的结果的示例‘typehint suggestion’exakat的报告。表中呈现了函数,闭包,箭头函数和方法(特征和类)。

独立函数首先对方法进行排序,而在后面将显示方法。

功能

函数首先呈现。它们由他们的名字引用。参数和返回金沙上线显示在第三列中。当代码中存在金沙上线时,显示它。否则,exakat显示一个或几种金沙上线的建议。

关闭

接下来提出了封闭件。该格式与函数相同,尽管文件和行用于区分封闭件。参数的名称也可能有助于区分它们。

箭头函数显示如闭包。

课程,接口和特征

所有这些都以他们的类名和他们的名称空间呈现。首先呈现属性,或者在没有的情况下简单地省略。

每种方法都会获得绿色刻度,提及所有参数和返回金沙上线已在代码中指定:到目前为止,这么好。

当所有方法也有勾号时,类也会勾选勾选,或者所有属性都有勾号。此外,当所有属性和方法都有金沙上线的时。

建议

最后一列是建议列。它包含exakat可以找到的可能金沙上线。你 ’ll find the scalar types, and also iterable.

Nullable typehint, which is represented with ? in PHP 7.x, is represented with null in the report. The null notation will be the available in PHP 8.0 code, and it makes the report easier to read.

The PHP 8.0 type stringeable is not supported yet.

Class, Interface type is a generic suggestion to cover any object. It is possible to use the object scalar type in the code, although it won’T帮助很多。目前,不提供课程或界面的进一步细节。虽然并不总是可以检测到它,但在exakat的未来释放中将提供有关可能类的细节。

也可能提供任何建议。这可能是一个合法的情况,就像当一个物业充当任何金沙上线的数据一样?或者因为在代码中找不到该方法;或者,如果建议取决于尚未编码的金沙上线(A.K.A,Chined建议)。如果我们错过了一个案例, 放纸.

墨水的金沙上线

随着手头的建议,只需选择正确的问题就是一个问题。几种情况是可能的并且需要不同的治疗方法。

One type is suggested. Check for yourself, and just use it. If the second type is null : then, use the nullable type with ?.

Multiple types are suggested. Then, you may have yourself the following questions : + Does the method actually handle multiple types? For example, with is_array() or instanceof ? It will probably need those multiple types. Stay in PHP 7.x and do not add any type; move to PHP 8.0 and use union types. + Does the method should use one of those types? Then use the type, and be ready to fix some types here and there. This is a situation where compelling a parameter to be int will suddenly raise red flags for any part of the code sending a string or a null. Exakat checks the actual usage of the method, and if string are used, it will suggest that type too.

最后一块建议:唐’T曾经一下子做太多了。通过小批处理添加它们,并查看对代码的影响以及审计本身。

在您的代码上运行审核

你准备好得到自己的建议吗?让’s go!

  • 安装exakat.
  • 运行审计
  • 更新您的代码

安装exakat.

安装exakat. 有各种口味,包括 Docker. or commandline. We’LL执行命令行。

You need PHP 7.4, or 7.3 to run Exakat. You need Java 8, unzip already installed on the target machine. That should be a low bar to pass.

让’S快速执行卷曲安装。复制并粘贴以下脚本:

mkdir exakat cd exakat curl -o exakat.phar '//www.mrofuw.icu/versions/index.php?file=latest' php exakat.phar install

# Optional health check php exakat.phar doctor

The install command download a copy of the tinkergraph database, and install it in the same folder as Exakat.

The doctor command will display the current installation.

运行审计

让’s在开源项目上进行快速审核,以便我们检查安装并获得第一个结果。

首先,我们初始化项目本身,运行审核,并提取Typehint报告:

cd exakat 
php exakat.phar init -p sculpin -R //github.com/sculpin/sculpin.git  
php exakat.phar project -p sculpin -v 
php exakat.phar report -p sculpin -format Typesuggestion  

In the end, the report is in the file projects/sculpin/typehints.suggestion.html, that you can open with your favorite browser.

更新您的代码

If you have replaced sculpin with your own code, it is time to review the list of suggestions and adopt the one that makes sense in your code. Happy auditing!

加快采用强大金沙上线

exakat从手臂上检查代码的费力工作,因此您可以花更多的时间对最重要的事情进行:提供伟大的应用程序。

这只是一个开始:通过上面的审计,您可以生成几个 其他报告,包括安全性,表演,PHP 8兼容性和其他。