在 PHP 升级到 PHP8 之前识别类型杂耍问题
Identifying type juggling issues before PHP upgrade to PHP8
目前,我坐在 PHP5.6,很快就会更新到 PHP8。我使用 PHPCS 检查兼容性问题,并在升级到 PHP8.
之前解决了这些问题
但是,我在测试过程中发现了一些与代码中的类型杂耍相关的问题,例如:
$x = "";
$x['test'] = "xyz";
print_r($x); //Warning: Only the first byte will be assigned to the string offset in /tmp/8dw2cmkrbq0pcq/tester.php on line 4 Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /tmp/8dw2cmkrbq0pcq/tester.php:4 Stack trace: #0 {main} thrown in /tmp/8dw2cmkrbq0pcq/tester.php on line 4
这段代码在 PHP5.6.
中运行良好
很遗憾,PHPCS 没有检测到这个问题,现在我想知道产品中是否还有更多类似的问题。
现在,我想知道在升级到 PHP8 之前是否有检测此类问题的方法?如果我能在升级到 PHP8.
之前获得有关如何查找此类问题的提示,那将非常有帮助
我能够使用 https://github.com/phan/phan 检测到此类问题。这是捕获的示例问题。
{
"type": "issue",
"type_id": 10030,
"check_name": "PhanTypeMismatchDimAssignment",
"description": "TypeError PhanTypeMismatchDimAssignment When appending to a value of type '', found an array access index of type 'hobbies', but expected the index to be of type int",
"severity": 5,
"location": {
"path": "PQR/models/XYZModel.php",
"lines": {
"begin": 171,
"end": 171
}
}}
谢谢大家的支持。
目前,我坐在 PHP5.6,很快就会更新到 PHP8。我使用 PHPCS 检查兼容性问题,并在升级到 PHP8.
之前解决了这些问题但是,我在测试过程中发现了一些与代码中的类型杂耍相关的问题,例如:
$x = "";
$x['test'] = "xyz";
print_r($x); //Warning: Only the first byte will be assigned to the string offset in /tmp/8dw2cmkrbq0pcq/tester.php on line 4 Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /tmp/8dw2cmkrbq0pcq/tester.php:4 Stack trace: #0 {main} thrown in /tmp/8dw2cmkrbq0pcq/tester.php on line 4
这段代码在 PHP5.6.
中运行良好很遗憾,PHPCS 没有检测到这个问题,现在我想知道产品中是否还有更多类似的问题。
现在,我想知道在升级到 PHP8 之前是否有检测此类问题的方法?如果我能在升级到 PHP8.
之前获得有关如何查找此类问题的提示,那将非常有帮助我能够使用 https://github.com/phan/phan 检测到此类问题。这是捕获的示例问题。
{
"type": "issue",
"type_id": 10030,
"check_name": "PhanTypeMismatchDimAssignment",
"description": "TypeError PhanTypeMismatchDimAssignment When appending to a value of type '', found an array access index of type 'hobbies', but expected the index to be of type int",
"severity": 5,
"location": {
"path": "PQR/models/XYZModel.php",
"lines": {
"begin": 171,
"end": 171
}
}}
谢谢大家的支持。