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

时间:2015-06-15 06:41:50

标签: php

人们,我怀疑这是我或我的电脑是否在这里很慢。

我跟着编码片:

DatePicker datePicker = new DatePicker();
datePicker.setDateFormat(new SimpleDateFormat("dd.MM.yy"));
datePicker.getComponent(0).setFont(font);
int height = datePicker.getComponent(0).getPreferredSize().height;
datePicker.getComponent(1).setPreferredSize(new Dimension(height, height));
inputList.add(datePicker);

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

当提供一个数组作为参数时,发生了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解析器在{{{{}}中发出一个数组到字符串的转换。 1}}行。

我不理解为什么在elseif块周围添加括号(将它们置于elseifif内部并不会改变任何内容)是为了使一切工作像一个魅力,因为foreach下面只有一个声明,因此不需要它们在那里:

if

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

编辑:谢谢大家。哈哈,我想你的答案证明我在这里很慢,哈哈哈。几个月的编程让人们写出疯狂的东西......

2 个答案:

答案 0 :(得分:3)

如果没有括号,PHP解析器将解析与{strong>第二 elseif相关的if语句,而不是第一个(外部)。添加括号会告诉解析器elseif属于第一个if

PHP 不像一样,其中缩进告诉解析器语句之间的关系。

答案 1 :(得分:1)

我假设当你在if语句周围放括号时它可以工作。无论如何,这就是为什么它不起作用。

           if($this->requireFile($singleFilePath))
                break;
    elseif(($filePath = stream_resolve_include_path($filePath = $filePath . '.php')) !== false)
        return require_once $filePath;

elseif与最后if语句分组,在这种情况下遇到内部if,您需要在外部if周围添加括号以明确告诉解析器else if属于外部而不是内部if。缩进在PHP中没有区别。

另一方面,你在elseif分支中有一个不必要的分配:$filePath = resolve_include_path($filePath = $filePath . '.php')可以在没有第二个分配$filePath = resolve_include_path($filePath . '.php')的情况下完成。

相关问题