如何将 PhpStorm 中的 PHPDoc 写入 return PDO 和 MySQLi 连接
How to write PHPDoc in PhpStorm to return both PDO and MySQLi connections
我编写了一个函数来简化数据库连接,能够通过 PDO 或 MySQLi 选项进行连接。
目前我正在与 PHPDov @return
属性.
作斗争
我已经在 PhpStorm 中找到了 PDO 方法的正确亮点,但我不知道如何使这两个选项的工作类似。下面的代码可能会更好地解释它。
这是我的 dbCon.php 函数:
<?php
# defining the root directory as constant
define('__ROOT__', dirname($_SERVER['DOCUMENT_ROOT']));
/**
* @param $db
* @param $conType
* @return PDO[]
*/
function dbCon($db, $conType)
{
# parse the data from db.ini where $db is database name
$_con = parse_ini_file(__ROOT__ . '/db.ini');
# set prefix if required by hosting to have one
$pre = 'database_';
# list parameters via variables
$_host = $_con[$db . '_ht'];
$_user = $pre . $_con[$db . '_un'];
$_database = $pre . $_con[$db . '_db'];
$_password = $_con[$db . '_pw'];
# PDO attributes
$_pdo_attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ERRMODE_WARNING // development mode only
];
# define dbCon variable;
$_dbCon = false;
# set PDO or MYSQLI connection
switch ($conType) {
case 'pdo':
try {
${$db . '_pdo'} = new PDO ("mysql:host=$_host;dbname=$_database; charset=utf8", $_user, $_password, $_pdo_attr);
$_dbCon = ${$db . '_pdo'};
$_dbSts = ${$db . '_pdo'}->getAttribute(PDO::ATTR_CONNECTION_STATUS);
} catch (PDOException $e) {
$_dbSts = false;
}
break;
case 'mysqli':
${$db . '_mysqli'} = new mysqli($_host, $_user, $_password, $_database);
if (${$db . '_mysqli'}->connect_error) $_dbSts = false;
else $_dbSts = explode(' ', mysqli_stat(${$db . '_mysqli'})); $_dbCon = ${$db . '_mysqli'};
break;
default:
$_dbSts = false; // error case
break;
}
# output
return ["dbSts" => $_dbSts,
"dbCon" => $_dbCon];
}
因此,如您所见...
/**
* @param $db
* @param $conType
* @return PDO[]
*/
..这对于返回 PDO 数组很有效,但由于该函数允许切换到 MySQLi,我希望这些方法也能突出显示。
如果您希望您的函数 return 不止一种类型,只需在它们之间放置一个管道即可。我不知道 mysqli 的具体 return 类型是什么,但你会想要这样的东西
@return PDO[]|MySQLi
我编写了一个函数来简化数据库连接,能够通过 PDO 或 MySQLi 选项进行连接。
目前我正在与 PHPDov @return
属性.
我已经在 PhpStorm 中找到了 PDO 方法的正确亮点,但我不知道如何使这两个选项的工作类似。下面的代码可能会更好地解释它。
这是我的 dbCon.php 函数:
<?php
# defining the root directory as constant
define('__ROOT__', dirname($_SERVER['DOCUMENT_ROOT']));
/**
* @param $db
* @param $conType
* @return PDO[]
*/
function dbCon($db, $conType)
{
# parse the data from db.ini where $db is database name
$_con = parse_ini_file(__ROOT__ . '/db.ini');
# set prefix if required by hosting to have one
$pre = 'database_';
# list parameters via variables
$_host = $_con[$db . '_ht'];
$_user = $pre . $_con[$db . '_un'];
$_database = $pre . $_con[$db . '_db'];
$_password = $_con[$db . '_pw'];
# PDO attributes
$_pdo_attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ERRMODE_WARNING // development mode only
];
# define dbCon variable;
$_dbCon = false;
# set PDO or MYSQLI connection
switch ($conType) {
case 'pdo':
try {
${$db . '_pdo'} = new PDO ("mysql:host=$_host;dbname=$_database; charset=utf8", $_user, $_password, $_pdo_attr);
$_dbCon = ${$db . '_pdo'};
$_dbSts = ${$db . '_pdo'}->getAttribute(PDO::ATTR_CONNECTION_STATUS);
} catch (PDOException $e) {
$_dbSts = false;
}
break;
case 'mysqli':
${$db . '_mysqli'} = new mysqli($_host, $_user, $_password, $_database);
if (${$db . '_mysqli'}->connect_error) $_dbSts = false;
else $_dbSts = explode(' ', mysqli_stat(${$db . '_mysqli'})); $_dbCon = ${$db . '_mysqli'};
break;
default:
$_dbSts = false; // error case
break;
}
# output
return ["dbSts" => $_dbSts,
"dbCon" => $_dbCon];
}
因此,如您所见...
/**
* @param $db
* @param $conType
* @return PDO[]
*/
..这对于返回 PDO 数组很有效,但由于该函数允许切换到 MySQLi,我希望这些方法也能突出显示。
如果您希望您的函数 return 不止一种类型,只需在它们之间放置一个管道即可。我不知道 mysqli 的具体 return 类型是什么,但你会想要这样的东西
@return PDO[]|MySQLi