如何在php类方法中释放内存

时间:2014-03-10 11:59:00

标签: php mysqli

我提出了Mine类的一部分正常工作 但我希望你的意见如下:
如何在函数中通过$result->free()方法释放资源,并将它们放在代码中。

在函数结束时写入它是否有用,当我之前返回值时? 当我在返回操作符之前放置它时,函数不起作用。

提前致谢!

require_once 'ggc_config.php';

class ggc
{       

    public static function executequery($querystring, &$id){
        $mysqli = new mysqli(_GGC_HOST_ , _GGC_USER_ , _GGC_PASSWORD_ , _GGC_DB_);
            if (mysqli_connect_errno()) {
            echo("Connect failed: ". mysqli_connect_error());
            return 0;
            }//if

        $mysqli->set_charset("utf8");
        $result=$mysqli->query($querystring); 
            if ($result===true){
            $id=$mysqli->insert_id;
            return 1;
            }//if
            else{
            return 0;
            }//else
        $result->free();
        $mysqli->close();
    }//executequeryi


    public static function getresults($querystring){
        $mysqli = new mysqli(_GGC_HOST_ , _GGC_USER_ , _GGC_PASSWORD_ , _GGC_DB_);
            if (mysqli_connect_errno()){
            die("Connect failed: ". mysqli_connect_error());
            }//if
        $mysqli->set_charset("utf8");

            if ($result = $mysqli->query($querystring)){
                while ($row = $result->fetch_row()) {
                    for ($i=0; $i<$mysqli->field_count; $i++){
                        $a[$i][]= $row[$i];
                    }//for
                }//while   
            }//if   
        return $a;
        $result->free();
        $mysqli->close();   
    }//function 

}//End of CLASS

由于你的建议我改变了我的代码:

require_once'ggc_config.php';

class ggc
{       
    public static function executequery($querystring, &$id){
        $mysqli = new mysqli(_GGC_HOST_ , _GGC_USER_ , _GGC_PASSWORD_ , _GGC_DB_);
        if (mysqli_connect_errno()) {
            echo("Connect failed: ". mysqli_connect_error());
            unset($mysqli);
            return 0;
        }//if

        $mysqli->set_charset("utf8");
        $result=$mysqli->query($querystring); 
        if ($result===true){
            $id=$mysqli->insert_id;
            unset($result);
            unset($mysqli);
            return 1;
        }//if
        else{
            unset($result);
            unset($mysqli);
            return 0;
        }//else
    }//executequery


    public static function getresults($querystring){
        $mysqli = new mysqli(_GGC_HOST_ , _GGC_USER_ , _GGC_PASSWORD_ , _GGC_DB_);
        if (mysqli_connect_errno()){
            die("Connect failed: ". mysqli_connect_error());
        }//if
        $mysqli->set_charset("utf8");

        if ($result = $mysqli->query($querystring)){
            while ($row = $result->fetch_row()) {
                for ($i=0; $i<$mysqli->field_count; $i++){
                    $a[$i][]= $row[$i];
                }//for
            }//while   
        }//if   
        unset($result);
        unset($mysqli);
        return $a;
    }//function 

}//End of CLASS

4 个答案:

答案 0 :(得分:2)

<强>更新

当然,你写它的方式有些不对。在return子句之后你不能做任何事情,因为它将结束函数执行。你需要在返回之前释放结果。

你写它的方式,用:

$result->free();
$mysqli->close();

在你之后放置return子句时也能正常工作。

$result->free();
$mysqli->close();
return $a;

答案 1 :(得分:2)

你根本不需要任何东西。

但是你知道,这对你的班级来说是个问题。

答案 2 :(得分:0)

后的返回,并关闭连接。

    $result->free();
    $mysqli->close();
    return $a;

答案 3 :(得分:-1)

它是我的功能的正确变体。我更新了变量名称作为PEAR NAME CONVENTION需要并添加了$ a = array();声明。

 public static function getResults($queryString){
        $mysqli = new mysqli(GGC_HOST , GGC_USER_ , GGC_PASSWORD , GGC_DB);
        if (mysqli_connect_errno()){
            die("Connect failed: ". mysqli_connect_error());
        }//if
        $mysqli->set_charset("utf8");
        $a=array();        
        if ($result = $mysqli->query($queryString)){
            while ($row = $result->fetch_row()) {
                for ($i=0; $i<$mysqli->field_count; $i++){
                    $a[$i][]= $row[$i];
                }//for
            }//while   
        }//if   
        unset($result);
        unset($mysqli);
        return $a;
    }//function