OOP的逻辑错误

时间:2011-06-19 15:22:54

标签: php oop yii

我正在学习Yii Framework。我第一次使用框架,我需要一些建议。 我的控制器上有一个getSocials()函数。

private function getSocials($id)
    {
        $socials=Socials::model()->find("socials_user=$id");
        foreach ($socials as $social)
        {
            $type = $social["socials_type"];
            $allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
        }
        return $allSocial;
    }

(它是私有的,因为我只是从另一个函数调用它)。 我将逐行解释,

$socials=Socials::model()->find("socials_user=$id");

通过 Socials 模型从数据库获取socials_user collumn等于 $ id 的数据。

foreach ($socials as $social)

$ socials作为数组返回,因为在数据库中有几行socials_user collumn等于 $ id

$allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";

在foreach循环中,将<li>...</li>添加到字符串的结尾,因此 $ allSocial 将为<li>...</li><li>...</li>...

BUt我得到未定义的变量:allSocial 错误。当我从等号 = )的前面删除 dot 时,它正在工作。但是这次是在foreach循环中,它总是被覆盖,最后 $ allSocial 只包含最后<li>...</li>

有任何逻辑错误吗?

3 个答案:

答案 0 :(得分:5)

$allSocial未在任何地方定义,您无法将字符串附加到未定义的变量。试试这样:

private function getSocials($id)
{
    $socials=Socials::model()->find("socials_user=$id");
    $allSocial = '';
    foreach ($socials as $social)
    {
        $type = $social["socials_type"];
        $allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
    }
    return $allSocial;
}

答案 1 :(得分:1)

在尝试将任何内容连接到它之前,您需要定义$allSocial。您可能还需要考虑返回一个数组,以便轻松访问不同的字符串。

private function getSocials($id) {
    $socials=Socials::model()->find("socials_user=$id");
    $allSocial = array();
    foreach ($socials as $social)
    {
        $type = $social["socials_type"];
        $str = "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
        array_push($allSocial, $str);
    }
    return $allSocial; 
}

答案 2 :(得分:1)

find函数将只返回一个不是数组的记录,因此foreach永远不会执行 用以下代码替换代码以使其正常工作:

private function getSocials($id)
{
    $socials=Socials::model()->findAll('socials_user=:socials_user', 
                    array(':socials_user'=>1));
    $allSocial = '';
    foreach ($socials as $social)
    {
        $type = $social["socials_type"];
        $allSocial .= "<li><a href=\"#\" rel=\"nofollow\">$type</a></li>";
    }
    return $allSocial;
}