微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP-if语句的奇怪行为:始终执行else块

人民,我对这是我还是我的计算机运行缓慢感到怀疑.

我下面的代码片段:

class Whatever
{
    ...

    private function requireFile($filePath)
    {
        if(is_array($filePath))
            foreach($filePath as $singleFilePath)
                if($this->requireFile($singleFilePath))
                    break;
        elseif(($filePath = stream_resolve_include_path($filePath = $filePath . '.PHP')) !== false)
            return require_once $filePath;
    }
}

除了是丑陋的代码,它无法按预期工作.
这里的想法是使该方法接受字符串和字符串数组作为参数,并且在数组的情况下,递归自身以处理每个字符串.

发生的事情是,当提供数组作为参数时,if和elseif块均被执行,从而使PHP解析器大喊它正在elseif行中进行数组到字符串的转换.

我不明白为什么在if块周围添加括号(将其放在foreach或内部,如果什么都没改变的话)会使所有内容像咒符一样工作,因为在下面只有一个语句if,因此不需要它们那里:

class Whatever
{
    ...

    private function requireFile($filePath)
    {
        if(is_array($filePath)) {
            foreach($filePath as $singleFilePath)
                if($this->requireFile($singleFilePath))
                    break;
        } elseif(($filePath = stream_resolve_include_path($filePath = $filePath . '.PHP')) !== false)
            return require_once $filePath;
    }
}

有人可以帮我吗?这段代码有什么问题?

编辑:谢谢大家.我想你的答案证明那是我在这里慢的一个,哈哈哈.离编程只有几个月的时间,人们才能写出疯狂的东西.

解决方法:

不带括号的PHP解析器将分析与第二个if(而不是第一个if(外部))有关的elseif语句.添加方括号告诉解析器elseif属于第一个if.

PHP与Python不同,PHP的缩进告诉解析器语句之间的关系.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐