未初始化的字符串偏移量错误

时间:2018-07-18 16:31:45

标签: php string uninitialized-constant

为什么会出现未初始化的字符串错误,我无法弄清楚?

这是我的功能:

function show_site_name($url,$lenght)
{
    $name='';
    $i=0;
    $slash=0;
    while($slash<3 && $i<=$lenght)
    {
        if($url[$i]=='/') $slash++;
        if($url[$i]!='/' && $slash==2) $name.=$url[$i];
        $i++;
    }
    return($name);
}

编辑: 我在这两行收到“未初始化的字符串偏移”错误:

    if($url[$i]=='/') $slash++;
    if($url[$i]!='/' && $slash==2) $name.=$url[$i];

1 个答案:

答案 0 :(得分:0)

该功能相当愚蠢。 PHP为parsing a url提供了不错的本机功能。另外,我假设“长度”是第一个参数的长度?当然可以使用strlen得出。

show_site_name('http://www.example.com', strlen('http://www.example.com'));

将得到Uninitialized string offset: 22

show_site_name('http://www.example.com', strlen('http://www.example.com')-1);

以上可能是您想要的。选项从零开始,而不是一个。

if($url[$i]=='/') $slash++;

上面的行是您超出字符串偏移量的位置。逻辑不好。您可以修正代码,避免使用或使用isset处理它。相信您的错误日志。

更新:

您可以通过传递如我所示的理智的参数来避免这种情况。或将其更改为:

if (isset($url[$i])) {
    if($url[$i]=='/') $slash++;
} else {
    return $name;
}

但是,那又太愚蠢了。

如果您坚持要这样做,我们称其为学习目的。为什么不这样做:

function show_site_name($url)
{
    $lenght = strlen($url) -1;
    ...

传递仅可以从第一个参数派生的第二个参数不是一个好方法。