1

$blocks我有一个名为该函数的数组,print_r()它将导致:

Array ( [0] => template.header [1] => error [2] => emails.addEmail )

这是我的代码:

if(count($blocks)) {
    foreach ($blocks as $block) {
        echo $block;
        $parts = explode('.', $block);
        if (count($parts) > 1) {
            list($folder, $file) = $parts;
            $folder = $folder . '/';
            echo BASE . '/blocks/' . $folder . $file . '.php';
        } else {
            echo BASE . '/blocks/' . $file . '.php';
        }
    }
    $parts = null;
}

但它的行为很奇怪,echo第 3 行给了我这个:

template.header
error
error

第三个必须是emails.addEmail,但它复制了第二个。

谁能告诉我我的代码有什么问题?

更新:我将其删除@并替换为if (count($parts) > 1). 对不起那些家伙。但这与我的问题无关!还是需要帮助...

更新 2:$block在这段代码之前的某个地方使用了变量,它通过引用另一个东西来连接。通过更改该变量名称解决了该问题。谢谢你们的帮助。

4

1 回答 1

2

我的第一印象是某些(包含的)文件以某种方式操纵$blocks数组或$block自身。您应该避免以这种方式引用变量;将变量更改保持在使用它们的范围附近。

我发现的其他问题:

echo BASE . '/blocks/' . $file . '.php';

应该:

echo BASE . '/blocks/' . $block . '.php';

因为$file只有在$parts包含至少两个元素时才会被设置。

还要测试拆分是否explode()返回了两个项目:

if (isset($parts[1])) { ... }

或者:

if (count($parts) > 1) { ... }

工作示例:http ://codepad.viper-7.com/6oNhBv

于 2012-10-09T11:55:36.633 回答