2017-01-14 1 views
0

프로젝트 구조를 mvc하는 방법을 배우고 있습니다. 데이터베이스 커넥터, 레지스트리 클래스, 모델 및 응용 프로그램 모델이 있습니다. 나는이 모든 것들을 한 곳에서 점검하여 작동하는지 확인합니다. 문제는 내가 실행할 때 이러한 세 가지 오류가 발생합니다.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->query("SELECT * FROM members"); //Call to undefined method MemberModel::query() 

가 교체 :

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

당신은 그냥 잊어 "-> conn->"를.

솔루션 :

$membermodel = new MemberModel($registry); 

당신이 전화하는거야 :

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

그리고

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

그냥 새 클래스에 매개 변수로 $ 레지스트리 VAR와 함께이 마지막 교체 생성자는 매개 변수가 필요하지만 해당 매개 변수는 참조하지 않습니다.

+0

올리베아 (Olivera)는 세 가지 문제를 모두 해결했지만 나에게 새로운 것을주었습니다. 멤버 함수를 호출합니다. abstract 클래스 모델에서 string에 get() 함수를 호출합니다. function __get ($ key)> return $ this-> registry-> get ($ key); // –

+0

레지스트리 클래스에서 "get"함수를 다음과 같이 바꿔보십시오. public function get ($ key) { return (isset ($ this-> data [$ key])))? $ this-> data [$ key] : null; } –

+0

그 오류가 계속 발생했습니다 –

관련 문제