可捕获的致命错误:类Template_Standard的对象无法转换为字符串

时间:2012-03-11 11:48:34

标签: php

所以,我有这个奇怪的错误:Catchable fatal error: Object of class Template_Standard could not be converted to string in C:\wamp\www\game\template\standard\index.php on line 23

它基本上由这两个文件组成:

template_standard.php(函数文件):

<?php
if (!defined('INCLUDED')) exit;

class Template_Standard
{
    public function print_login_text ()
    {
        global $user_functions, $path;
        if ($user_functions -> is_logged_in ())
        {
            return '<p>' . WELCOME_BACK . $_SESSION['username'] . '</p>';
        }
        else
        {
            return '<div id="login_form">
                <form action="' . $path . 'login" method="post">
                    <p>
                        <input type="text" name="name"/> ' . NAME . '<br/>
                        <input type="password" name="pass"/> ' . PASSWORD . '
                    </p>
                    <p><input type="submit" value="' . LOG_IN . '" class="button"/></p>
                    <p><a href="' . $path . 'register" onclick="get_register();return false">' . REGISTER . '</a></p>
                </form>
            </div>';
        }
    }

    public function print_menu ()
    {
        global $path;
        $html = '<ul id="menu">';
        $html .= '<li><a href="' . $path . '"><img src="' . $path . 'media/menu/home.png" width="100" height="35"/></a></li>';
        $html .= '<li><a href="' . $path . 'register"><img src="' . $path . 'media/menu/register.png" width="100" height="35"/></a></li>';
        $html .= '</ul>';
        return $html;
    }
}
?>

模板文件:

<?php
if (!defined('INCLUDED')) exit;

require '././functions/template_standard.php';
$template = new Template_Standard();

$register_form = '<form action="' . $path . 'register" method="post">\\
    <p>\\
        <input type="text" name="name"/> ' . NAME . '<br/>\\
        <input type="password" name="pass"/> ' . PASSWORD . '<br/>\\
        <input type="password" name="pass2"/> ' . PASSWORD_AGAIN . '<br/>\\
        <input type="text" name="email"/> ' . EMAIL . '<br/>\\
    </p>\\
    <p><input type="submit" value="' . REGISTER . '" class="button"/></p>\\
</form>';
$head .= <<<HTML
<link href="{$path}template/$template/style.css" rel="stylesheet" type="text/css"></link>
<!--[if lt IE 9]><style type="text/css">#content{border:1px solid #333;}</style><![endif]-->
<script type="text/javascript">
function get_register ()
{
    var speed = 'fast';
    var html = '$register_form'; // Error here
    $('#login_form').fadeOut(speed, function(){
        $('#login_form').html(html).fadeIn(speed);
    });
    return false;
}

$(document).ready(function(){
    if (screen.height < 768) {
        $('#footer').hide();
    } // Fourth error, and so on
}); // Third error here
</script> // If I remove the place with the first error, the second is here ...
HTML;
$body_start .= '<div id="content"><a href="' . $path . '"><div id="header"><img src="' . $path . 'media/header/logo.jpg" width="600" height="150"/></div></a><div id="menu-container">' . $template -> print_menu () . '</div><br style="clea:left"/><div id="content-left">';
$body_end .= '</div><div id="content-right">' . $template -> print_login_text() . '</div></div><div id="footer"><div style="float:right;text-align:right">Lorem ipsum ...</div>Copyright &copy; 2012 Jacob<br/>All rights reserved</div>';
?>

问题是,如果我删除带有错误的行,它只会在HTML内部的另一行中抛出错误。解决问题的唯一方法是删除其中的所有内容。 此外,如果我直接在模板文件中有这些功能,它也很有用。

1 个答案:

答案 0 :(得分:1)

您将$template变量用作字符串:

<link href="{$path}template/$template/style.css" rel="stylesheet" type="text/css"></link>

因此,PHP会尝试将对象转换为字符串,但它在您的类中找不到__toString()方法!