Работа с анонимными классами

117
28 июля 2019, 16:00

Задался таким вот вопросом. Попробую описать.

Сначала примерный код:

class mysql {
    function __construct($db_config) {
        // Проверка $db_config и connect к базе
    }
    private function connect() {
        // Подключение к базе
    }
    public function query() {
        // запрос к базе, после всех необходимых сравнений у нас имеется переменная $this->query_id где либо false в случае неудачи или PDOStatement объект для дальнейшей работы
        return $this->query_id;
    }
}
$db = new mysql($db_config);
$db->query("select ....");

Хотелось бы чтобы функция query возвращала новый класс в котором будут дополнительные функции, например: $db->query('...')->fetch();

Собственно в чем загвоздка. Хотелось бы чтобы по запросу $db->query('...') отдавалась переменная $this->query_id. Так если возвращать объект, имеется только данные по объекту.

Такое вообще возможно в реализации?

Таким вот $db->query('...') образом мне хотелось бы получать и объект PDO, а в дальнейшем уже работать с ним за пределами класса, но чтобы когда обращаюсь например: $db->query('...')->fetch(); и когда $db->query('...') отдает false (то есть переменная $this->query_id) чтобы ->fetch() естественно тоже отдавал false. То есть в другом классе подключенном выше классе я мог бы прочитать $this->query_id и отдать false или ассоциативный массив.

Заморочился чет =)

Answer 1

В первую очередь, анонимные классы тут не при чем.

Если хочется расширить функциональность PDOStatement, то надо писать свой класс, вполне себе именованный, который дублирует его функциональность и добавляет эту непонятно зачем нужную переменную

class myStatement($stmt, $query_id)
{
    public function __construct($stmt, $query_id)
    {
        $this->query_id = $query_id;
        $this->stmt = $stmt;
    }
    public function fetch($params)
    {
        return $stmt->fetch(...$params);
    }
}

и отдаваь уже его

public function query() {
    // запрос к базе
    return new myStatement($stmt, $this->query_id);
}

соответственно, если хотим получить эту странную перменную, то

$db->query('...')->query_id; 

если фетч, то

$db->query('...')->fetch(); 

если все вместе, то

$mystmt = $db->query('...');
$mystmt->query_id; 
$mystmt->fetch(); 
READ ALSO
Как грамотно вставить название таблицы из переменной в SQL-запрос? PHP/PDO

Как грамотно вставить название таблицы из переменной в SQL-запрос? PHP/PDO

Забиндить невозможно, а аналогов mysql_real_escape_string() у PDO нетБудет ли правильно использовать PDO::quote() ?

122
Абсолютный путь к папке на уровень выше

Абсолютный путь к папке на уровень выше

Есть главная папка с проектом в которой находится папка конфига, в конфиге есть php файл, в котором я ищу абсолютный путь к этой папке так:

112
парсинг с библиотекой Simple HTML DOM

парсинг с библиотекой Simple HTML DOM

в парсере есть функция file_get_html, если в нее передать адрес

135
Получение данных из google spreadsheet (php)

Получение данных из google spreadsheet (php)

Нужно получить выборку данных из гугл таблицы по дате, все даты расположены в порядке убывания в одной колонке

113