【问题标题】:function php with parameter 0带参数 0 的函数 php
【发布时间】:2012-12-03 05:11:26
【问题描述】:

我有这样的功能

public function get_page($position) {

    switch ($position) {
        case "current":
            echo "current";
            return $this->current_page;
            break;
        case "first":
            echo "first";
            return $this->current_page >= 3 ? 1 : false;
            break;
        case "last":
            echo "last";
            return $this->current_page <= $this->total_pages() - 2 ? ceil($this->count / $this->nb_items_to_show) : false;
            break;
        case "previous":
            echo "previous";
            return $this->current_page - 1 >= 1 ? $this->current_page - 1 : false;
            break;
        case "next":
            echo "next";
            return $this->current_page + 1 <= $this->total_pages() ? $this->current_page + 1 : false;
            break;
        case is_int($position):
            echo "int";
            if ($position >= 1 && $position <= $this->total_pages()) {
                return $position;
            } else {
                return false;
            }
            break;
        default:
            echo "default";
            return false;
            break;
    }
}

当我调用该函数时,它适用于除 0 之外的所有参数,并在开关中进入“当前”情况。

$paginator->get_page(0);

如果我用引号“0”调用函数,它可以工作。 但是函数可以这样调用

$paginator->get_page($paginator->get_page("current") - 2);

如何调用参数为 0 的函数?

【问题讨论】:

  • $paginator-&gt;get_page(0); 不等于$paginator-&gt;get_page('first');
  • 我认为缺少某些代码...如果输入为 0 或“0”,则 switch 语句应为默认值
  • 参数 0 怎么变成“当前”?它不应该是默认的吗?或者可能是 is_int()?
  • 也许switch 使用== 而不是===
  • 这是一个分页系统。基于当前页面,我想显示“当前页面 - 2”。我这样调用函数 $paginator->get_page($paginator->get_page("current") - 2)。当当前页面 = 2 时,“当前页面 - 2 = 0”不存在并应返回 false(它应该在 is_int 的情况下出现,但在“当前”的情况下出现!!)

标签: php function parameters int switch-statement


【解决方案1】:

is_int 返回TRUEFALSE

case is_int($position): 这与case -1:case 1: 相同,但不是case 0:

在 PHP 中,TRUE 被认为是任何非零值

您可能正在寻找case intval($position):

还值得注意的是,当比较string0 时,它总是会返回TRUE,除非字符串以数字开头,例如23balloons。这就是 PHP 的工作原理。

因此,出于以下原因,您将希望 所有整数条件都继续处理您的字符串条件

当在数字上下文中计算字符串时,结果值 和类型确定如下。

如果字符串不包含任何字符“.”、“e”或“E” 并且数值适合整数类型限制(定义为 PHP_INT_MAX),字符串将被评估为整数。在所有其他 情况下,它将被评估为浮点数。

该值由字符串的初始部分给出。如果字符串 以有效的数字数据开头,这将是使用的值。 否则,该值将为 0(零)。有效的数字数据是 可选符号,后跟一个或多个数字(可选包含一个 小数点),后跟一个可选的指数。指数是一个 ‘e’ 或 ‘E’ 后跟一个或多个数字。

更多信息可以在here找到。

【讨论】:

  • 我可能会建议重新设计他的分页系统...我认为这种切换语法有问题
  • switch 语法很好,只是字符串与 0 的比较有点误导。
  • 已确认。 case intval($position): 是要走的路。
  • 目前,我已将此条件放在函数if ($position === 0) { $position = "0"; } 的开头,这似乎可以解决问题。今天我会尝试一下你的建议。谢谢!
【解决方案2】:

切换前添加:

if (!is_string($position)) {
goto default;
}

【讨论】:

    【解决方案3】:

    改变:

    is_int // Find whether the type of a variable is integer
    

    到:

    is_numeric // Finds whether a variable is a number or a numeric string
    

    【讨论】:

      猜你喜欢
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2011-04-28
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多