Как получить полный список всех методов из конкретного объекта драйвера PDO? - программирование
Подтвердить что ты не робот

Как получить полный список всех методов из конкретного объекта драйвера PDO?

Я пытался получить все методы для каждого драйвера PDO (у меня все они установлены на моем ПК с Windows).

Но если я попытаюсь, например, использовать Postgres (pdo_pgsql):

var_export(get_class_methods('PDO'));

Результат:

array (
  0 => '__construct',
  1 => 'prepare',
  2 => 'beginTransaction',
  3 => 'commit',
  4 => 'rollBack',
  5 => 'inTransaction',
  6 => 'setAttribute',
  7 => 'exec',
  8 => 'query',
  9 => 'lastInsertId',
  10 => 'errorCode',
  11 => 'errorInfo',
  12 => 'getAttribute',
  13 => 'quote',
  14 => '__wakeup',
  15 => '__sleep',
  16 => 'getAvailableDrivers',
)

Но этот список неполон, потому что PDO Postgres включает такие методы, как:

$pdo->pgsqlCopyToArray('my_table');

Есть ли способ получить все методы, а не только значения по умолчанию для PDO?

Заранее спасибо, Celso

Редактирование:

Я тоже пробовал Reflection, и результат неполон, как get_class_methods():

var_export(array_column((new ReflectionClass('PDO'))->getMethods(), 'name'));

Результат тот же:

array (
  0 => '__construct',
  1 => 'prepare',
  2 => 'beginTransaction',
  3 => 'commit',
  4 => 'rollBack',
  5 => 'inTransaction',
  6 => 'setAttribute',
  7 => 'exec',
  8 => 'query',
  9 => 'lastInsertId',
  10 => 'errorCode',
  11 => 'errorInfo',
  12 => 'getAttribute',
  13 => 'quote',
  14 => '__wakeup',
  15 => '__sleep',
  16 => 'getAvailableDrivers',
)
4b9b3361

Ответ 2

Прежде всего вы должны понять, что такое PDO в соответствии с PHP Docs:

Вступление ¶

Расширение PHP Data Objects (PDO) определяет легкий, согласованный интерфейс для доступа к базам данных в PHP. Каждый драйвер базы данных, который реализует интерфейс PDO, может предоставлять специфичные для базы данных функции как обычные функции расширения. Обратите внимание, что вы не можете выполнять какие-либо функции базы данных, используя расширение PDO само по себе; Для доступа к серверу базы данных необходимо использовать драйвер PDO для конкретной базы данных.

PDO обеспечивает уровень абстракции доступа к данным, что означает, что независимо от того, какую базу данных вы используете, вы используете одни и те же функции для выдачи запросов и извлечения данных. PDO не обеспечивает абстракцию базы данных; он не переписывает SQL и не эмулирует отсутствующие функции. Вы должны использовать полноценный слой абстракции, если вам нужно это средство.

PDO поставляется с PHP 5.1 и доступен как расширение PECL для PHP 5.0; PDO требует новых функций OO в ядре PHP 5 и поэтому не будет работать с более ранними версиями PHP.

В нем четко указано, что PDO - это легкий интерфейс для доступа к базе данных. Посмотрите на примечание при условии, что воспроизводится снова

Примечание: что вы не можете выполнять какие-либо функции базы данных, используя расширение PDO само по себе; Для доступа к серверу базы данных необходимо использовать драйвер PDO для конкретной базы данных.

Чтобы понять более четко, в POD есть четыре вещи:

Интерфейс PDO Заявления PDO Исключения PDO Драйверы PDO

(Одинаково для всех БД) (одинаково для всех БД) (одинаково для всех БД) (различается для всех БД)

get_class_methods перечисляет только методы PDO, а не другие методы функций get_class_methods функций исключений и функций драйверов

Теперь подумайте, что есть четыре разных класса для PDO:

Класс PDO Класс PDO_Statement Класс PDO_Exections Класс PDO_Driver

Утверждения, исключения и драйверы внутренне связаны с классом PDO

Теперь вы вызываете get_class_methods в Class PDO он покажет Методы Class PDO и если вы хотите узнать все методы PDO_Driver, вам нужно вызвать правильное имя класса PDO_Driver.

Теперь, как правильно назвать драйвер PGSQL, это внутренняя часть PHP, и для этого вам нужно изучить внутреннюю часть PHP.