5

関数内から呼び出された場合、returnステートメントは現在の関数の実行をただちに終了し、その引数を関数呼び出しの値として返します。

phpマニュアルからの引用:http://php.net/manual/en/function.return.php

したがって、この関数を作成する場合は、次のようになります。

public function check_db_for_desired_value()
{
  //...connect to db, prepare stmt, etc.
  while (mysqli_stmt_fetch($stmt))
  {
    if($column == 'desired_value')
    {
      return TRUE;  
    }
    else
    {
      return FALSE;
    }
  }
  // these commands would never get executed
  mysqli_stmt_free_result($stmt); 
  mysqli_stmt_close($stmt);
  mysqli_close($link);
}

したがって(phpマニュアルの内容が正しければ)結果が解放されることはなく、stmtが閉じられることはなく、db接続が開いたままになります。これは、何かを返し、関数の実行を終了したためです...

それで、何かを返す代わりに、変数の値を設定し、すべてを閉じた後にこの値を返す必要がありますか?

私のコードは機能していて、エラーが発生しないので、以前にこのような関数を作成したことがありますが、私は尋ねます...

4

1 に答える 1

3

あなたは正しいです、。の後に何も実行されませんreturn

__destructただし、接続を閉じて結果をクリアするために使用できます。

function __destruct() {
    mysqli_stmt_free_result($this->stmt); // making $stmt a variable inside class
    mysqli_stmt_close($this->stmt);
    mysqli_close($this->link);
}

デストラクタメソッドは、特定のオブジェクトへの他の参照がなくなるとすぐに、またはシャットダウンシーケンス中に任意の順序で呼び出されます。-PHP.NET _

returnそれ以外の場合は、が呼び出される前に解放と終了を移動する必要があります。

于 2013-03-25T14:00:11.887 に答える