cel*_*owm 11 php reflection methods pdo
我试图获取每个PDO驱动程序的所有方法(我的Windows PC上都安装了所有方法)。
但是,例如,如果我尝试使用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',
)
Run Code Online (Sandbox Code Playgroud)
但是此列表不完整,因为PDO Postgres包含以下方法:
$pdo->pgsqlCopyToArray('my_table');
有没有办法获取所有方法,而不仅仅是PDO默认值?
在此先感谢,Celso
编辑:
我也尝试过反射,结果像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',
)
Run Code Online (Sandbox Code Playgroud)
首先你必须根据 PHP 文档了解什么是 PDO:
\n\n\n\n\n简介 \xc2\xb6
\n\nPHP 数据对象 (PDO) 扩展定义了一个轻量级、一致的接口,用于访问 PHP 中的数据库。每个实现 PDO 接口的数据库驱动程序都可以将特定于数据库的功能公开为常规扩展函数。请注意,您无法单独使用 PDO 扩展来执行任何数据库函数;您必须使用特定于数据库的 PDO 驱动程序来访问数据库服务器。
\n\nPDO 提供数据访问抽象层,这意味着,\n 无论您使用哪个数据库,\n 都可以使用相同的函数来发出查询和获取数据。PDO 不提供数据库抽象;它不会重写 SQL 或模拟缺失的功能。如果您需要该功能,则应该使用成熟的抽象层。
\n\nPDO 随 PHP 5.1 一起提供,并可作为 PHP\n 5.0 的 PECL 扩展使用;PDO 需要 PHP 5 核心中的新 OO 功能,因此无法与早期版本的 PHP 一起运行。
\n
它明确指出PDO是访问数据库的轻量级接口。再次查看那里提供的注释
\n\n\n\n\n注意:您不能单独使用 PDO 扩展来执行任何数据库功能;您必须使用特定于数据库的 PDO 驱动程序\n 来访问数据库服务器。
\n
为了更清楚地理解,POD 中有四件事,即
\n\nPDO 接口 PDO 语句 PDO 异常 PDO 驱动程序
\n\n(所有数据库相同) (所有数据库相同) (所有数据库相同) (所有数据库不同)
\n\nget_class_methods
只列出PDO的方法,不列出语句函数、异常函数和驱动程序函数的其他方法
现在认为 PDO 有四种不同的类:
\n\n类 PDO 类 PDO_Statement 类 PDO_Exections 类 PDO_Driver
\n\n语句、异常和驱动程序在内部链接到 PDO 类
\n\n现在您调用get_class_methods
它将Class PDO
显示 PDO_Driver 的方法Class PDO
,如果您想知道 PDO_Driver 的所有方法,那么您必须调用正确的PDO_Driver
类名称。
现在PGSQL驱动程序的正确名称是什么?它是PHP的内部结构,为此你必须研究PHP内部结构。
\n