mustang_shelby
@mustang_shelby
i like (*_metallica_*)

Как сделать один динамичный метод на php?

Здравствуйте ! Хотел бы узнать как сделать такой метод который бы принимал имя таблици в переменную - что бы не делать постоянно каждый метод отдельно !
1 метод для выборки из таблици slider
public function getStuff() {
    	$result = $this->db->row('SELECT * FROM `slider`');
    	return $result;
    }

а вот второй
public function getMainDb() {
        $result = $this->db->row('SELECT * FROM `$tables`');
        return $result;
    }


из второго примера можно увидеть что я уже пытался писать переменную $tables а дальше не знаю как
Спасибо !
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Для вопроса из заголовка
abstract class BaseORM {
    protected $table;
    protected $db;
    public function __construct($db) {
        $this->db = $db;
    }
    public function getById($id) {
        $stmt = $this->db->prepare("SELECT * FROM `$this->table`" WHERE id=?);
        $stmt->execute([$id]);
        return $stmt->fetch();
    }
    public function getAll() {
        return $this->db->query("SELECT * FROM `$this->table`");
    }
}

class SliderDB extends BaseORM {
    protected $table = 'slider';
}

$slider = new SliderDB($db);
$allSliders = $slider->getAll();


Для вопроса из комментов
у меня интернет магазин - и там у меня есть список лучших товаров - отдельный список магазинов и отдельный список лучших предложений - и если мне писать каждый метод с каждым именем таблици - мне сказали что я нарушаю правило" не повторйся"! и думал я как же мне быть что бы в переменную таблица записывалась динамично и что бы не было массу методов как то так.


function getTableData($table) {
    $list = ['best_offers', 'shops', 'best_products'];
    if (!in_array($table, $list)) {
        throw new InvalidArgumentException('Table name not found');
    }
    return $this->db->row('SELECT * FROM `$table`');
}

$data = getTableData('shops');
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Используйте магический метод __call() для написания таких методов
Ответ написан
Комментировать
Newn
@Newn
public function getMainDb($tables) {
        $result = $this->db->row('SELECT * FROM '.$tables);
        return $result;
    }


public function getMainDb($tables) {
        $result = $this->db->row("SELECT * FROM {$tables} ");
        return $result;
    }


public function getMainDb() {
        global $tables
        $result = $this->db->row("SELECT * FROM {$tables} ");
        return $result;
    }


Не?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы