私はOOPを学ぼうとしていて、PDOを使用するクラスを作成することにしました。ここに私のクラスからのいくつかのコードがあります。
class DB extends PDO {
public function _construct($dsn,$user,$pass,$options=""){
        $options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
        try {
              parent::__construct($dsn, $user,$pass,$options);
              $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        }
         catch(PDOException $e)
         {
              echo $e->getMessage();
         }
}
    public function run($query,$all="",$secure=""){
    if(empty($secure)){
        $qry=$this->query($query);
    }else{
        $qry=$this->prepare($query);
        $qry->execute($this->cleanup($secure));
    }
    if($all=="all"){
         return $qry->fetchAll(PDO::FETCH_ASSOC);
    }else{
         return $qry->fetch(PDO::FETCH_ASSOC);
    }
}
private function cleanup($secure) {
    if(!is_array($secure)) {
        if(!empty($secure))
            $secure = array($secure);
        else
            $secure = array();
    }
    return $secure;
}
public function rowCount($table,$extra=""){
    $query="Select count(*) from ".$table;
    if(!empty($extra)){
        $query="Select count(*) from ".$table." ".$extra;
    }
    $qry=$this->query($query)->fetchColumn();
    return $qry;
}
public function select($table,$extra=""){
    $query="Select * from ".$table;
    if(!empty($extra)){
        $query="Select * from ".$table." ".$extra;
    }
    return  $this->query($query);
}
}
次のコードの違いは何ですか?同じ結果が得られないのはなぜですか?
//usage 1 (it doesnt work that way)
$return =$qry->fetchAll(PDO::FETCH_ASSOC);
return $return;
//usage 2 (it is exactly what i need but i want to learn the difference)
return $qry->fetchAll(PDO::FETCH_ASSOC);
編集:私は本当に私が間違っていたことを知りませんが、これらの使用法の間に違いはないようです。両方とも現在機能しています。
これが私の方法の使い方です
$result=$db->run("my query","all");
foreach($result as $r){
    //
}
構築メソッドでは、PDOのクエリメソッドを使用して文字をutf-8に設定しますが、機能しません。DBオブジェクトを作成した後に使用すると、機能します。
try {
    parent::__construct($dsn, $user,$pass,$options);
    $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $this->query("SET NAMES 'UTF8'");
            $this->query("SET CHARACTER SET UTF8");
}
最後の質問
            //what do u think about this usage.I didnt run accross some thing like this
            //all the pdo classes i checked use it just 
            // return $qry->fetchAll(PDO::FETCH_ASSOC);
            //do you think i need to separate "fetchAll"  and "fetch"
            if($all=="all"){
         return $qry->fetchAll(PDO::FETCH_ASSOC);
    }else{
         return $qry->fetch(PDO::FETCH_ASSOC);
    }