私はMySQLiクラスを継承するカスタムdbクラスを持っています MySQLi-> query()メソッドはMySQLi_Resultクラスでobejctを返しますが、このクラスのfuncionalityを何とか拡張したい結果オブジェクトをMyResultクラスにします。このようなもの:あるクラスのインスタンスを別のクラスのインスタンスにするには
class MyResult extends MySQLi_Result{
function abc(){
//...
}
}
class MyDB extends MySQLi{
function q($query){
return /*Here some magic*/ $this->query();
}
}
$db=new MyDB();
$res=$db->q('SEL...');
$res->abc();
これを行う方法?
編集: これは重複していると言う人もいますが、ここでの問題は深いです。 $ resultオブジェクトがMysqli_resultクラスのobectのように動作する必要があるので、古いコードが動作する必要があります。 だから私は、私のようなオリジナルのMysqli_resultメソッドを呼び出すことができていることが必要です。
MyResultが必要になりますclass MyResult {
private $result;
function __construct(MySQLi_Result $result)
{
$this->result = result;
}
//Here some methods that use $this->result as you wish
}
class MyDB extends MySQLi{
function q($query){
return new MyResult($this->query($query));
}
}
$db=new MyDB();
$res=$db->q('SEL...');
$res->myMethod();
が重複する可能性[mysqli_resultを拡張](http://stackoverflow.com/questions/6195377/extend-mysqli-result) – Gordon
ちょうどあなたのMyResultのメソッド "FETCH_ASSOC" を追加します。それはMySQLi_Result(関数fetch_assoc(){return $ this-> result-> fetch_assoc();})と同じメソッドに委譲します。ボーナスは、この関数に独自のロジックを追加することもできます(たとえば、ページのノーバーをカウントするなど)、あなたの古いコードは引き続き機能します。 – Mironor
@Mironor OPは 'mysqli_fetch_object(mysqli_result $ result [、string $ class_name [、array $ params]])を使用することもできますが、カスタムの' MySqli_Result'クラスを返すのではなく、クエリされたデータのカスタムオブジェクトを返します。 – Gordon