php – 扩展mysqli_result

前端之家收集整理的这篇文章主要介绍了php – 扩展mysqli_result前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我扩展了 PHPMysqLi类,工作正常.但是,如何在查询时使其返回自定义结果对象(或插入/更新/删除等的布尔值)?
namespace MyApp;
class MysqLi extends \MysqLi {
    public function query($query,$resultmode = null) {
        // This needs to return a MysqLiResult or a boolean
    }
}
class MysqLiResult extends \MysqLi_result {
}

这样做我可以返回一个MysqLiResult对象,但我无法弄清楚如何为非基于选择的查询返回一个布尔值:

public function query($query,$resultmode = null) {
    $this->real_query($query); 
    return new MysqLiResult($this);
}

更新:

这是我最终使用的:

class MysqLi extends \MysqLi {

    public function query($query,$resultmode = null) {
        $result = parent::query($query,$resultmode);
        return is_bool($result) ? $result : new MysqLiResult($result);
    }

}


class MysqLiResult {

    private $result;

    public function __construct(MysqLi_result $result) {
        $this->result = $result;
    }

    public function __call($name,$arguments) {
        return call_user_func_array(array($this->result,$name),$arguments);
    }

    public function __set($name,$value) {
        $this->result->$name = $value;
    }

    public function __get($name) {
        return $this->result->$name;
    }

}
可能最简单的事情就是将MysqLiResult类视为MysqLi_result的装饰器.例如
class MysqLiResult
{
    private $result;

    public function __construct(\MysqLi_result $result)
    {
        $this->result = $result;
    }
}

然后,您可以将方法调用代理到内部结果,并在需要时进行装饰(添加功能).

原文链接:https://www.f2er.com/php/139171.html

猜你在找的PHP相关文章