2

自分のpdo_connectionクラスの PDO クラス メソッドを使用できませextends PDOん。

Class pdo_connection { 
//connection create 
    private $dbhost = "127.0.0.1"; 
    private $dbname = "db"; 
    private $dbuser = "user"; 
    private $dbpass = "pass"; 
    public function __construct() { 
        return $db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass); 
    } 
}

そして、オブジェクトを作成すると:

require("api/pdo.connection.class.php"); 
$db = new pdo_connection(); 
$db->exec("SET NAMES utf8");  

exec は pdo_connection クラスのメソッドではないので使えませんが、pdo_connectionクラスで作成した PDO のメソッドを使いたいです。

4

3 に答える 3

4

そのように使いたい場合はpdo_connection、PDO を拡張する必要があります。

例:

class db extends PDO {

次に、そのクラス内で__construct、次を使用しますparent::__construct

parent::__construct('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);

これは、そのメソッドを使用して作成したクラスです: [リンク]

使用法:

include_once 'db.php';
$db = new db('user');
// Do stuff with $db
于 2012-12-07T20:25:47.870 に答える
3
  1. 命名/自動読み込みの規則に従います(例:PSR-0)
  2. オートローダーを使用します。クラスにrequire/includeを使用している場合は、間違っている可能性があります。
  3. classコードをラップしてOOPと呼ぶだけでは不十分です。
  4. PDOを拡張できなかった理由はわかりませんが、とにかく...

class MyPdo
{

  protected $db;
  protected $dbhost = '127.0.0.1';
  protected $dbname = 'db';
  protected $dbuser = 'user';
  protected $dbpass = 'pass';

  protected function __construct()
  {
    $this->db = PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
  }

  public function __call($method, $args)
  {
    return call_user_func_array(array($this->db, $method), $args);
  }

}
于 2012-12-07T20:36:20.533 に答える
3

コンストラクターの戻り値の型はvoid. コンストラクターを使用して、オブジェクトのプロパティを初期化します。呼び出し時の戻り値new ClassName()は型になりClassNameます。

そうは言っても、クラスを拡張したい場合は、次のPDO方法で行うことができます。

class pdo_connection extends PDO { ... }

とはいえ、個人的にはこのままではいけません。実際、すばやく検索すると、次の記事にたどり着きました。

私は個人的に PDO を拡張しようとしたことがないので、それを考慮してください。

代わりに、PDO オブジェクトをクラス プロパティとして保存し、その PDO オブジェクトと対話する独自の関数を定義してみませんか?

Class pdo_connection { 
//connection create 
    private $dbhost = "127.0.0.1"; 
    private $dbname = "db"; 
    private $dbuser = "user"; 
    private $dbpass = "pass"; 
    public function __construct() { 
        try { // Don't forget this....
            $this->db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass); 
        } catch(PDOException $e) { }
    } 

    public function exec() {
     /// do your exec stuff here
    }
}
于 2012-12-07T20:29:35.830 に答える