2017-01-06 6 views
0

のメンバ関数の関数()呼び出し!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

'$ _POST ['name']'が空文字列かどうかを確認してください。あなたは '名前 'として何を提出していますか? – vbrmnd

+0

著者名を提出しています。空のままにしておくと 'input text'になりますので、デフォルトでは' Anonymous'で書くべきですが、そうではありません。空白フィールドを挿入しています –

答えて

0

の私のコードで私はパブリック静的関数の関係(DatabaseObject)がは "メソッドを呼び出してくださいと思い、私のコードコメントクラスであります「作成」メソッドの結果に「作成」します。条件が満たされなければ、FALSEを返します。その後、DatabaseObjectはCreate on FALSEメソッドを呼び出します。 Createメソッドを呼び出す必要がある場合は、FALSEまたは空のオブジェクトを返す代わりに例外をスローするとよいでしょう。

+0

実際にはバディはデータベースにデータを完全に挿入していますが、 '!empty($ author)'のような名前をチェックすると、このエラーが発生します。それでまだ内部の他の条件を読み込んでいます。 –

+0

var_dump(!empty($ photograph_id)&&!empty($ author)&&!empty($ body))の結果を教えてください。 – Lukas

+0

'[ID] => [著者] =>ハムザ [コメント] =>私はそれが働いていること [作成] => 2017年1月6日午前12時34分二十七秒 [photograph_id] => 26' –

0

あなたの問題は、デフォルトの引数は、そのように動作するように起こっている

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

、あなたのメソッドのシグネチャです。あなたがstring(0) ""を送信する場合、$authorパラメータが空の文字列値を取るために起こっているといない'Anonymous'

あなたはいくつかのオプションがあり、

は、あなたの引数の順序を変更していない場合は、それをオプションにotの最後の引数として$authorを作るのどちらか著者名を提出するか、または空の著者名を'Anonymous'に置き換えて、クラス定義のどこかでクラス定数として使用できます。

また、questionも参考になる場合があります。