我正在构建自己的框架,我正在尝试将参数传递给静态方法。由于某种原因,参数未被传递。这是代码:
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。
答案 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('...');
}
希望这有帮助!