2017-02-21 1 views
-1

나는 아주 명확하길 바래!PHP : 다른 클래스에서 abstract 클래스 메서드 호출

내 DB를 가져오고, 삽입하고, 작업하는 사람이 dbFacile입니다.

$db = dbFacile::open('mysql', DATABASE, USERNAME, PASSWORD, HOST); 

$db->fetchRows('select * from my_stores') 

는 나는 내가 테이블 my_stores에서 내 모든 상점과 $ 배열을 얻으려면 다른 클래스를 만들었습니다.

class Stores { 
    public $s_table = 'my_stores'; 
    public $rows; 
    public function get_all_stores(){  
     $this->rows = $db->fetchRows('select * from $this->s_table'); 
     foreach($rows as $row) { 
      echo $row['name'] . '<br />'; 
     } 
    } 
} 

나는 나의 get_all_stores에 방법을 dbFacile을 시작하려했지만, 그 클래스는 추상적이고 나는 할 수 없습니다.

$db = \dbFacile\factory::mysql(); 
$db->open(DATABASE, USERNAME, PASSWORD, HOST); 
$db->fetchRows('select * from my_stores'); 
... 

예 클래스 사용 :

class Stores { 
private $s_table = 'my_stores'; 
private $db; 

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

public function get_all_stores(){ 
    $rows = $this->db->fetchRows(sprintf('select * from %s', $this->s_table)); 
    //do your stuff with rows and maby return $rows 
} 
} 

$db = \dbFacile\factory::mysql(); 
$db->open(DATABASE, USERNAME, PASSWORD, HOST); 

//usage 
$stores = new Stores($db); 
$stores->get_all_stores(); 
+2

('\ dbFacile \ factory :: mysqli()'같은) 팩토리 메소드 중 하나를 사용하지 말아야합니까? – radmen

+0

나는 내가 어떻게 이런 걸 쓰는지 모르겠다. 나는 그 공장 파일을 온라인으로 갖고 있지 않다. db.class.php –

+0

@radmen 여기서 도와 줄 수 있니? http://collabedit.com/fpee7? –

답변

1

당신이 원하는 방법을 그것이 그것에서

+0

dbFacile 기본 클래스 란 무엇입니까? 여기에서 나를 도울 수 있습니까 : http://collabedit.com/fpee7? –

+1

완료되었습니다. –

1

은 새로운 의도 된 사용법은 볼 수 GitHub의 저장소의 단위 테스트 폴더입니다 생성자를 통해 클래스에 $db을 삽입하려면

class Stores { 
    private $db; 
    public function __construct(className $db) { 
    $this->db = $db; 
    } 
} 

여기서 className은 dbFacile 기본 클래스의 전체 네임 스페이스 클래스 이름이어야합니다. 그래서 잘못된 의존성으로 상점을 인스턴스화하려고 할 때마다 PHP가 오류를 던집니다.

이 방법을 사용하면 상점 클래스에 의존성을 주입 할 수 있으며 클래스 내에서 원하는 모든 곳에 $ this-> db를 사용할 수 있습니다.

+0

이걸 내가 새 클래스에서 어떻게 사용할 수 있습니까? –

+0

방금 ​​설명하기 위해 내 게시물을 편집했습니다 –

+0

치명적 오류 : 정의되지 않은 메서드를 호출하십시오. dbFacile_mysql :: fetchRows() –

0

db 객체를 생성자를 통해 상점에 전달할 수 있습니다. 의존성 주입에 대해 읽어보십시오.

관련 문제