2017-01-14 3 views
0

からデータをロードしようとしたとき、私はプロジェクト構造をMVCする方法を学ぶ/働いています。私は、データベースコネクタ、レジストリクラス、モデル、アプリケーションモデルを持っています。私はそれを確認するためにこれらのすべてを1つの場所に持っています。問題は、私が実行するときにこれらの3つのエラーが発生することです。エラーのMySQL

<?php 

class db 
{ 
    protected $conn; 
    protected $host, $username, $password, $database; 

    public function __construct($host, $username, $password, $database) 
    { 
     $this->conn = new mysqli($host, $username, $password, $database) 
     OR die("There was a problem connecting to the database"); 

     return true; 
    } 

    public function query($sql) 
    { 
     $result = $this->conn->query($sql); 
     if (!$result) { 
      die('Invalid query:'); 
     } 
     return $result; 
    } 

    public function escape($value) 
    { 
     return $this->conn->real_escape_string($value); 
    } 

    public function countAffected() 
    { 
     return $this->conn->affected_rows; 
    } 

    public function getLastId() 
    { 
     return $this->conn->insert_id; 
    } 

    public function __destruct() 
    { 
     $this->conn->close() 
     OR die("Problem disconnecting from the database"); 
    } 
} 

final class registry 
{ 
    private $data = array(); 

    public function get($key) 
    { 
     return (isset($this->data[$key]) ? $this->data[$key] : null); 
    } 

    public function set($key, $value) 
    { 
     $this->data[$key] = $value; 
    } 

    public function has($key) 
    { 
     return isset($this->data[$key]); 
    } 
} 

abstract class Model 
{ 
    protected $registry; 

    public function __construct($registry) 
    { 
     $this->registry = $registry; // Undefined variable: registry 
    } 

    public function __get($key) 
    { 
     return $this->registry->get($key); 
    } 

    public function __set($key, $value) 
    { 
     $this->registry->set($key, $value); 
    } 

} 

class MemberModel extends Model 
{ 
    public function getMember() 
    { 
     $result = $this->query("SELECT * FROM members"); //Call to undefined method MemberModel::query() 
     return $result; 
    } 
} 

// DB 
define('DB_HOSTNAME', 'localhost'); 
define('DB_USERNAME', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_DATABASE', 'pcaframework'); 

$registry = new registry(); 

// Database 
$db = new db(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 
$registry->set('db', $db); 

$membermodel = new MemberModel(); //Missing argument 1 for Model::__construct() 

$allMembers = $membermodel->getMember(); 

while ($row = mysqli_fetch_assoc($allMembers)) { 
    echo "First Name: " . $row['name'] . "<br />"; 
    echo "Last Name: " . $row['email'] . "<br />"; 
    echo "<hr />"; 
} 
  • モデルの引数1がありません:: __構築物()、$のmembermodelで呼び出さ=新しいMemberModelを();
  • 未定義の変数:未定義のメソッドMemberModelにレジストリ
  • コール::クエリ()

私は、エラーが発生した場所を正確にマークするために、コードに誤りがコメントしています。

答えて

1

ソリューション:あなたは忘れ

$result = $this->conn->query("SELECT * FROM members"); 

" - > conn->" を:

$result = $this->query("SELECT * FROM members"); //Call to undefined method MemberModel::query() 

と交換してください。

$this->registry = $registry; // Undefined variable: registry 

そして

$membermodel = new MemberModel(); //Missing argument 1 for Model::__construct() 

ただ、新しいクラスにパラメータとして$レジストリVARと、この最後のを置き換えます:へ

ソリューション

$membermodel = new MemberModel($registry); 

あなたが呼んでいますコンストラクタはパラメータを必要としますが、そのパラメータは参照していません。

+0

オリベラ、抽象クラスモデル>関数__get($キー)の文字列のメンバ関数のget()を呼び出して、すべての3つの問題を解決しますが、私に新しいものを与えた>の$ this - > registry-> GET($キーを返します); // –

+0

レジストリクラスの関数 "get"を次のように置き換えてください。 public function get($ key) { return(isset($ this-> data [$ key])))? $ this-> data [$ key]:null; } –

+0

...エラーは私がコード教えてください –