致命错误:在布尔值上调用成员函数Function()

时间:2017-01-06 11:57:45

标签: php post form-submit

我编写了简单的插入数据代码,但无论何时使用!empty($author),它都会给我这个错误Fatal error: Call to a member function Create() on boolean,但我删除了对!empty($author)的检查,以便它可以正常工作。我真的不明白这是给出了这个错误,是什么意思。

这是我的代码评论类

 class Comment extends DatabaseObject{
    // Attributes
    protected static $TableName = 'comment';
    protected static $DBFields = array('id','author','comment','created','photograph_id');
    public $id;
    public $author;
    public $comment;
    public $created;
    public $photograph_id;

    // Create Comment
    public static function Make($photograph_id,$author='Anonymous',$body=''){
        if(!empty($photograph_id) && !empty($author) && !empty($body)){
            $Comment = new Comment();
            $Comment->author = $author;
            $Comment->comment = $body;
            $Comment->photograph_id = (int)$photograph_id;
            $Comment->created = date("Y-m-d H:i:s",time());
            return $Comment;
        }else{
            return FALSE;
        }

    }
    // Find Comment Related Picture
    public static function CommentOfPicture($photograph_id){
        global $db;
        $Comment = static::FindByQuery("SELECT * FROM ".static::$TableName." WHERE `photograph_id`='".$db->EscapeValue($photograph_id)."' ORDER BY created ASC");
        return $Comment;

    }
}

这是我的表单提交代码

// Comment Submit
    if(isset($_POST['submit'])){
        $Name = trim($_POST['name']);
        $Body = trim($_POST['comment']);
        if(!empty($Body) || !empty($Name)){
            $Comment = Comment::Make($Photo->id,$Name,$Body);
            if($Comment->Create()){
                $Session->MSG("Success: Comment is submit, awaiting for approval");
                RedirectTo("photo.php?id={$Photo->id}");
            }else{
                $Session->MSG("Danger: Something is Wrong");
                RedirectTo("photo.php?id={$Photo->id}");
            }           
        }else{
            $Session->MSG("Danger: Comment is empty");
            RedirectTo("photo.php?id={$Photo->id}");
        }
    }

2 个答案:

答案 0 :(得分:0)

我认为公共静态函数Make 的关系(DatabaseObject)在“Make”方法的结果上调用方法“Create”。如果条件失败,您将返回FALSE。然后DatabaseObject调用方法Create on FALSE - 出错!如果必须调用Create方法,如果你抛出异常而不是返回FALSE或空对象,那将会更好。

答案 1 :(得分:0)

您的问题是您的方法签名,

public static function Make($photograph_id,$author='Anonymous',$body='')

默认参数将起作用。如果您发送string(0) "",则$author参数将采用空字符串值,而不是'Anonymous'

你没有多少选择,

要么更改参数的顺序,要使$author作为最后一个参数,如果没有提交作者姓名,则使其成为可选项,或者您可以将空作者姓名替换为'Anonymous',将其作为类常量替换为课程定义。

此外,此question可能有所帮助。