4

だから私はこのようなDBクラスを持っています

class db{

    private $hostname = 'localhost';
    private $username = 'root';
    private $password = 'root';
    private $con;

    public function db(){
        try {
            $dbh = new PDO("mysql:host=$this->hostname;dbname=myDB", $this->username, $this->password);
        }catch(PDOException $e){
            echo $e->getMessage();
            exit();
        }
        $this->con = $dbh;
        echo 'Connected to database<br />';
    }

そして私のindex.php

include('db.class.php');
include('todo.class.php');
include('dressTemplate.inc.php');

$db = new db;

$todo = new todo($db);

そして、私の todo.class.php は次のように始まります

class todo{

function todo(db $db){
    $this->db = $db;
} 

public function render($post) {

    $db &= $this->db;

しかし、私はこの通知を受け取ります

Notice: Undefined variable: db in todo.class.php on line 11

Notice: Object of class db could not be converted to int in todo.class.php on line 11

todo.class.php で db を正しく定義するにはどうすればよいですか?

4

4 に答える 4

2

を使用して&=います。に等しい$db = $db & $this->dbです。そして最初の通知は、PHP が何も知らないためです$db(まだ宣言されていません)。2 番目の通知は、あなたがやろうとしているからです(null) & (object)。First はintfirst に変換され、次に「オブジェクトを変換できませんでした」というメッセージが表示されます (PHP は式全体を として処理しようとするためint) 。

それだけです: オブジェクト変数は正しく設定されていますが、$db変数はローカルであり、それとは何の関係もありません。そして、あなたは&ビットごとのAND)を介してオブジェクトで奇妙なことをしています

ヒント: PHP4 を使用していない限り、古い PHP4 の方法でクラス コンストラクターを定義しないでください。PHP5 には、そのための__construct()マジック メソッドがあります。

于 2013-11-06T09:24:45.430 に答える
1

これを試して:

class todo {

  var $db;

  __construct(&$db) {
    $this->db = $db;
  }

  public function render($post) {
    $db = &$this->db;
  }
}
于 2013-11-06T09:22:58.490 に答える
0

todo クラスは__construct、クラス名とともに または public 関数を使用する必要があります。

class todo {

    var $db;

    __construct (db $db) {
        $this->db = $db;
    }

    // OR

    public function todo(db $db){
        $this->db = $db;
    } 

    ...
}
于 2013-11-06T09:25:06.493 に答える
0

パブリック コンストラクターを使用する必要があります。__construct() これは私にとっては問題なく機能します。

class db{

    private $hostname = 'localhost';
    private $username = 'root';
    private $password = 'root';
    private $con;

    public function __construct(){
        try {
            $dbh = new PDO("mysql:host=$this->hostname;dbname=myDB", $this->username, $this->password);
        }catch(PDOException $e){
            echo $e->getMessage();
            exit();
        }
        $this->con = $dbh;
        echo 'Connected to database<br />';
    }
}



class todo{

    public function __construct(db $db){
        $this->db = $db;
    }
}
于 2013-11-06T09:26:33.503 に答える