使用PHP将参数传递给静态方法

使用PHP将参数传递给静态方法,php,static,parameters,Php,Static,Parameters,我正在构建自己的框架,并尝试将参数传递给静态方法。由于某些原因,无法传递该参数。代码如下: Front.php: if(URI::get(0) === "") URI.php: public static function get($index) { die($index); if(!filter_var($index, FILTER_VALIDATE_INT)) { throw new Exception('You must s

我正在构建自己的框架,并尝试将参数传递给静态方法。由于某些原因,无法传递该参数。代码如下:

Front.php:

if(URI::get(0) === "")
URI.php:

public static function get($index)
    {
        die($index);
        if(!filter_var($index, FILTER_VALIDATE_INT)) {
            throw new Exception('You must supply an integer index for the URI segment');
        }

        return self::$uri[$index];
    }
起初,我得到了一个异常,所以我在die语句中添加了一个异常,以确保$index实际上被正确传递。显然,这并不是因为脚本退出时,没有为索引打印任何内容


我使用的是PHP5.3.1。

这很奇怪,因为它应该可以工作;测试这部分代码后:

class ClassA {
    public static function a($param) {
        var_dump($param);
    }
}

ClassA::a(123);
die(0);
我得到这个输出:

int 123
这表明静态方法确实收到了参数(实际上,我看不出为什么它不应该)


作为旁注,您将以这部分代码结尾:

class ClassA {
    public static function a($param) {
        var_dump($param);
    }
}

ClassA::a(123);
die(0);
引用手册页(与模具相同)(强调我的):

如果状态为字符串,则此函数 在退出之前打印状态。
如果status是一个整数,那么 值也将用作出口 地位
[…]
注意:PHP >=4.2.0如果是整数,则不打印状态。

您使用的是PHP5.3,这是比4.2更新的版本;在您的例子中,
$status
是一个整数,这意味着您发布的代码没有显示任何内容是完全正常的


最后,如果您移除
模具
,您的代码将执行以下操作:

if(!filter_var($index, FILTER_VALIDATE_INT)) {
    throw new Exception('...');
}
使用
$index=0

返回过滤后的值;使用
FILTER\u VALIDATE\u INT
,我假设您正在进行筛选以获得一个整数——0是整数

这意味着您对
filter\u var
的调用将返回
0

0
被视为
false
(请参阅)--因此,您将进入
if
块;然后将抛出异常


考虑到回报:

  • 过滤后的数据
  • 或当过滤器出现故障时
    false
  • 并且
    0
    是可以返回的有效数据
您可能应该使用
==
运算符(请参阅)将返回值与
false
进行比较。这意味着一些代码如下所示:

if(filter_var($index, FILTER_VALIDATE_INT) === false) {
    throw new Exception('...');
}

感谢您的响应,我添加了一个echo而不是die,并且0正在传入…不幸的是,引发了异常,这意味着它不认为0是int。