2017-02-21 11 views
-1

Надеюсь, что это будет очень ясно!PHP: вызов метода абстрактного класса в другом классе

У меня есть 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 />'; 
     } 
    } 
} 

Я пытался инициировать dbFacile в моем get_all_stores метода, но этот класс является абстрактным и я не могу.

+2

Не следует ли использовать один из заводских методов (например, '\ dbFacile \ factory :: mysqli()')? – radmen

+0

Я буду, но я не знаю, как я использую что-то подобное, у меня нет этого файла на заводе db.class.php –

+0

@radmen вы можете мне помочь здесь: http://collabedit.com/fpee7? –

ответ

1

, как вы хотите сделать это впрыснуть $db в Stores класса с помощью своего конструктора

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

где className должно быть полным именем класса пространства имен базового класса dbFacile. Таким образом, PHP генерирует ошибку всякий раз, когда вы пытаетесь создать экземпляр магазинов с неправильной зависимостью.

Таким образом, вы вводите свою зависимость в классе Stores, и вы можете использовать $ this-> db везде, где хотите внутри этого класса.

+0

Что означает базовый класс dbFacile? Вы можете мне помочь здесь: http://collabedit.com/fpee7? –

+1

сделано, проверьте –

1

От него это единичные тесты папки репозитория GitHub вы можете увидеть новое предполагаемое использование является:

$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(); 
+0

Как я могу использовать это в своем новом классе? –

+0

Я только что редактировал свой пост, чтобы проиллюстрировать это: –

+0

Неустранимая ошибка: вызов неопределенного метода dbFacile_mysql :: fetchRows() –

0

Вы можете передать объект db в магазины через конструктор. Читайте об инъекции зависимостей.

 Смежные вопросы

  • Нет связанных вопросов^_^