2011-07-26 6 views
0

私は単純なデータベースラッパークラスを作成しようとしています。 mysql_fetch_objectへの呼び出しは次のエラーで失敗し、このメソッドを呼び出すときに、私は$のCLASS_NAMEを指定しない場合class_nameがnullのときにmysql_fetch_objectが失敗するのはなぜですか?

public function get_objects($sql, $class_name = null) { 
    $result = mysql_query($sql, $this->connection); 
    $objs = array(); 
    if($result) { 
     while ($obj = mysql_fetch_object($result, $class_name)) { 
      $objs[] = $obj; 
     } 
     mysql_free_result($result); 
    } 
    return $objs; 
} 

:私はそうのような方法を書いた

PHP Fatal error: Class '' not found in ... 

問題は、私ドンでありますclass_nameを使用します。まるでclass_nameを指定しなかったかのように、デフォルトの動作を実行したいだけです。

なぜこれが失敗しますか?

答えて

3

デフォルト nullではありません。デフォルトでは、(ドキュメントから)stdClassです:

The name of the class to instantiate, set the properties of and return. If not specified, a stdClass object is returned.

あなたが同じデフォルトを維持したい場合は、あなたのメソッドのシグネチャとしてこれを持っている必要があります:彼は「パススルー」を望んでいるので

public function get_objects($sql, $class_name = "stdClass") { 
    // continue as normal. 
+0

私はクラス名を引用する必要があると思います。 – prodigitalson

+0

@prodigitalsonあなたが正しいです。回答が編集されました。 – cwallenpoole

+0

偽の第2パラメータを送信するとどうなりますか? –

2

特定のクラスを指定しない場合、なぜclass_name引数を使用していますか?あなたは絶対にそれを使用する必要がある場合

、それは文字列を期待しているので、これは

if ($result) { 
    $class_name = $class_name ? $class_name : 'stdClass'; 
    ... 
+0

彼のカスタム関数を作成するので、デフォルトを持つ必要があります。 – prodigitalson

0

たぶん動作するはずです、あなたはそれがnull与えます。 $ class_name!= nullかどうかを確認するifチェックを行います。

public function get_objects($sql, $class_name = null) { 
    $result = mysql_query($sql, $this->connection); 
    $objs = array(); 
    if($result) { 
     if ($class_name){ 
      while ($obj = mysql_fetch_object($result, $class_name)) { 
       $objs[] = $obj; 
      } 
     }else{ 
      while ($obj = mysql_fetch_object($result)) { 
       $objs[] = $obj; 
      } 
     } 
     mysql_free_result($result); 
    } 
    return $objs; 
} 
関連する問題