我有以下代码,可确保在应用更新后我的数据库架构是最新的。
private function migrate($old_version) {
switch ($old_version) {
/** @noinspection PhpMissingBreakStatementInspection */
case self::NOT_INITIALIZED:
migrateToV0();
/** @noinspection PhpMissingBreakStatementInspection */
case 0:
migrateToV1();
/** @noinspection PhpMissingBreakStatementInspection */
case 1:
migrateToV2();
/** @noinspection PhpMissingBreakStatementInspection */
case 2:
migrateToV3();
case 3:
migrateToV4();
}
}
正如您所看到的,@noinspection
注释必须放在每个 case
之前,以免检查员抱怨我没有break
声明。< / p>
我仍然希望通常对我的代码发出此警告,因此通常禁用该规则是不可取的,但将它清理一下会很不错。也许在switch语句之前只有一个@noinspection
:
private function migrate($old_version) {
/** @noinspection PhpMissingBreakStatementInspection */
switch ($old_version) {
case self::NOT_INITIALIZED:
migrateToV0();
case 0:
migrateToV1();
case 1:
migrateToV2();
case 2:
migrateToV3();
case 3:
migrateToV4();
}
}
这在PHPStorm中是否可行?这个无需注意的注释来自PHPStorm / Intellij吗?或者它是一个集成的第三方工具?
答案 0 :(得分:1)
在Eclipse + CodeSniffer和PHPStorm v2016.2中,所需要的只是你显示你知道&#34;直通&#34; switch
case
s。
这可以像添加空注释一样少(仅在PHPStorm v2016.2上测试;在Eclipse上,在我的头顶,评论有效,空注释可能):
switch ($old_version) {
case self::NOT_INITIALIZED:
migrateToV0();
// then:
case 0:
migrateToV1();
// then:
case 1:
migrateToV2();
//
case 2:
migrateToV3();
//
case 3:
migrateToV4();
//
}
即使从代码覆盖的角度来看它不是很干净(函数可以隐式定义而不是解决),我也可以这样做 - 特别是如果有很多这样的话我也有从DB或INI文件读取它们,和/或它们定义的类甚至没有加载(这对于非常大类/函数):
$transitions = [
0 => 'migrateToV1',
1 => [ 'Migrations', 'migrateToV2' ],
2 => function() { die('Oh noes!'); },
3 => 'migrateToV4',
];
foreach ($transitions as $ifVersion => $todo) {
// if $todo is an array I can check the class exists
if ($old_version === $ifVersion) {
$newVersion = $todo($old_version);
if (null === $newVersion) {
$newVersion = $old_version +1;
}
$old_version = $newVersion;
}
}