我编写了简单的插入数据代码,但无论何时使用!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}");
}
}
答案 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可能有所帮助。