1

我有这样的功能

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 调用函数?

4

3 回答 3

1

is_int返回TRUEFALSE

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

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

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

还值得注意的是,将 a 与 进行比较时string0它将始终返回TRUE,除非字符串以数字开头,例如23balloons. 这就是 PHP 的工作原理。

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

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

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

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

更多信息可以在这里找到。

于 2012-12-15T11:05:32.560 回答
-1

改变:

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

到:

is_numeric // Finds whether a variable is a number or a numeric string
于 2012-12-15T11:15:46.927 回答
-2

切换前添加:

if (!is_string($position)) {
goto default;
}
于 2012-12-15T11:09:56.110 回答