PHP通过引用传递

时间:2014-11-25 08:43:59

标签: php pass-by-reference

我有以下代码。我希望检查方法hasQuerystring()能够传递修改后的url ..

但是,结果显示hasQuerystring始终返回false,这意味着该参数未指向修改后的url ..

以下是代码:

private function __addParams(&$url, $params, $addedParams = null) {
    if(!empty($addedParams)) {
        foreach($params as $param => $val) {
            if(!in_array($param, $addedParams)) {
                $url .= ($this->__hasQuerystring($url))? "&{$param}={$val}" : "?{$param}={$val}" ;
            }
        }
    } else {
        foreach($params as $param => $val) {
            $url .= ($this->__hasQuerystring($url))? "&{$param}={$val}" : "?{$param}={$val}" ;
        }
    }
    return $url;
}   

private function __hasQuerystring($url) {
    return strpos('?',$url);
}

[编辑]

这是返回之前url的值

https://mobile.domain.com/en/#/#m=2&eid=123?param1=9675?param2=23d9dj8rsaE3dG1

2 个答案:

答案 0 :(得分:2)

使用strpos首先将搜索内容传递给搜索,然后搜索下一个搜索内容。 查看文档: http://php.net/manual/en/function.strpos.php

return strpos($url, '?') !== FALSE;

答案 1 :(得分:0)

替换

return strpos('?',$url);

return strpos($url, '?') !== FALSE;

请务必核对the manual

  

警告

     

此函数可能返回布尔值FALSE,但也可能返回a   非布尔值,其值为FALSE。请阅读有关的部分   布尔值获取更多信息。使用===运算符进行测试   返回此函数的值。

这就是为什么总是返回FALSE。

此外,如果您不使用__addParams的结果,则可以删除return $url;

稍后编辑:

我将return strpos('?',$url) !== FALSE;替换为return strpos($url, '?') !== FALSE;,因为Erik指出。