【问题标题】:PHP 4 to PHP 5 - isset checks on boolean if statementsPHP 4 到 PHP 5 - isset 检查布尔 if 语句
【发布时间】:2012-05-31 09:16:18
【问题描述】:

场景: 我们正在将应用程序从 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 这样的程序可以以某种方式引用这些变量或创建某种可以找到错误并链接可能引用的链接? (我希望这是有道理的。)

【问题讨论】:

  • 使用issetempty 有什么问题?只是工作量很大?
  • 对我来说,重写(直接到 PHP5.3)听起来不像重构那么复杂。
  • @ExplosionPills - 它有时可以改变程序的逻辑流程。如果有条件检查是否设置了变量,则设置变量可能会在以后破坏它。这是一个大型应用程序。
  • 但未定义的变量只会在 PHP 5 中返回一个通知,而不是致命错误......
  • @Flukey:错误就是错误。不管是什么,都应该修好。

标签: php migration php4


【解决方案1】:

AFAIK 有一个代码检查器,可以查找未初始化的变量,它可以正常工作。您可以处理它的消息,它被称为PHP Mess Detector,其中一条规则涵盖未初始化的变量。然而,这永远不会是完美的。

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

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

也请看:

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2015-05-25
    • 2015-10-14
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多