【问题标题】:Uninitialized string offset error未初始化的字符串偏移错误
【发布时间】:2018-07-18 16:31:45
【问题描述】:

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

这是我的功能:

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];

【问题讨论】:

标签: php string uninitialized-constant


【解决方案1】:

这个功能比较傻。 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;
    ...

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

【讨论】:

  • 设置在哪个变量上?我该如何解决?
  • 感谢您的更新,你是魔术师!问题解决了,干杯!
  • 我不能放弃投票,因为我收到消息“感谢您的反馈!声望低于 15 的人的投票将被记录,但不要更改公开显示的帖子得分。” - 不过还是非常感谢你!
  • 如果答案回答了您的问题,您应该接受
  • 已完成,谢谢!也许更好地“竖起大拇指”(比如在 facebook 上,呵呵!)
猜你喜欢
  • 1970-01-01
  • 2019-08-11
  • 2017-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多