PHP 4 到 PHP 5 - isset 检查布尔 if 语句


PHP 4 to PHP 5 - isset checks on boolean if statements

场景:我们正在将应用程序从 PHP 4 转换为 PHP 5。应用程序需要能够在 PHP 4 上工作一段时间,这意味着尚不能使用 PHP 5 特定的元素。我们只是试图确保应用程序在两个平台上都有效。

应用程序中有很多条件如下所示:

if ($variable) { // do something }

其中一些变量最终根本没有被定义,我们正在努力减少错误的数量(有很多错误)。

为了解决这些错误,我们在各个区域添加了检查,如下所示:

if (!isset($variable)) $variable = "";

if (!empty($variable)) { // do something }

问题:有谁知道修复这些错误的更简单方法。问题是这些变量正在跨文件使用(通过包含),并且定义变量可能会更改该文件中的逻辑流,如果它执行检查(if (!isset($variable)) {//do something })。

这个问题的重点是减少跟踪这些变量的每次单独使用的错误和时间消耗。目前,我们必须彻底检查变量在做什么(这可能需要大量时间),或者我们正在做一个"即发即弃"/希望它的固定纠正方法。

--编辑--有谁知道像 cppcheck for php 这样的程序可以以某种方式引用这些变量或创建某种链接来查找错误并链接可能的引用?(我希望这是有道理的。

AFAIK 有一个代码检查器,可以查找工作正常的未初始化变量。你可以处理它的消息,它被称为PHP混乱检测器,它的规则之一涵盖了未初始化的变量。然而,这永远不可能是完美的。

另一种方法是跟踪错误消息并使用它们来定位代码中的位置。我过去做过,效果很好,只需在迭代中执行此操作并记录警告即可。

您还可以使用白名单并在请求开始时导入列入白名单的变量。未列入白名单的提交需要导致访问冲突错误才能正常工作,因此这种方式比跟踪警告工作更多,尽管它可能会使应用程序更安全。

另请参阅:

  • PHP 语法检查预源代码控制
  • E_NOTICE ?== E_DEBUG,避免使用更复杂的error_handler isset() 和 @
  • isset() 和 empty() 使代码变得丑陋