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

时间:2009-12-26 19:42:00

标签: 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 supply an integer index for the URI segment');
        }

        return self::$uri[$index];
    }

起初我得到了一个异常,所以我在die语句中添加了以确保$ index实际上正确传递。显然这不是因为当脚本退出时,索引没有打印出来。

我使用的是php 5.3.1。

1 个答案:

答案 0 :(得分:3)

这很奇怪,因为它应该有效;在测试了这部分代码之后:

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

ClassA::a(123);

我得到了这个输出:

int 123

这表明静态方法确实收到了参数(实际上我没有理由不应该这样做。)


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

die(0);

引用exit 的手册页(与模具相同) (强调我的)

void exit  ([ string $status  ] )
void exit ( int $status )
  

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

您正在使用PHP 5.3,这是一个比4.2更新的版本;并且,在您的情况下, $status是一个整数 - 这意味着没有显示任何内容,使用您发布的代码是完全正常的。


并且,完成:如果您删除die,您的代码最终会执行此操作:

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

使用$index = 0

filter_var返回过滤后的值;使用FILTER_VALIDATE_INT,我想你要过滤得到一个整数 - 0是整数。

这表示您对filter_var的通话将返回0

0被视为false (请参阅Converting to boolean - 因此,您将进入if块;并且会抛出异常。


考虑filter_var返回:

  • 过滤后的数据
  • 过滤器失败时
  • false
  • 0是可以返回的有效数据

您应该使用===运算符(请参阅Comparison Operators,将返回值与false进行比较。这意味着一些看起来像这样的代码:

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


希望这有帮助!