【问题标题】:How to write PHPDoc in PhpStorm to return both PDO and MySQLi connections如何在 PhpStorm 中编写 PHPDoc 以返回 PDO 和 MySQLi 连接
【发布时间】:2020-01-17 07:43:51
【问题描述】:

我编写了一个函数,可以通过 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,我希望这些方法也可以突出显示。

【问题讨论】:

  • 为什么同时需要两者?它们将具有不同的方法签名等。只需坚持一种或使用单独的方法来创建不同的连接处理程序。无论如何:正如@Mark 所说——使用\PDO[]|\MySQLi 之类的东西——这意味着这两种类型中的任何一种都是可能的(相关说明:不要直接回答你的问题,而是让你知道它是如何实现的作品:stackoverflow.com/a/10717583/783119) 。 PHPDoc PSR 草案:github.com/php-fig/fig-standards/blob/master/proposed/…
  • 背后的想法只是编写一个单一的函数,我只更改一个参数(在我的例子中为$conType)并在需要时使用不同的方法。如您所见,函数一次只返回一个连接取决于$conType
  • “背后的想法只是编写一个单一的函数,我只更改一个参数(在我的例子中是 $conType)并在需要时使用不同的方法。” 这正是原因这不好。随着时间的推移,你会理解它,并且会喜欢使用简单的函数(只是做某事)而不是复杂的函数。

标签: php return phpstorm phpdoc


【解决方案1】:

如果您希望您的函数返回多个类型,只需在它们之间放置一个管道。我不知道 mysqli 的具体返回类型是什么,但你会想要这样的

@return PDO[]|MySQLi

https://docs.phpdoc.org/references/phpdoc/tags/return.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2015-04-05
  • 2015-10-04
  • 2020-09-23
  • 2013-09-24
  • 2016-02-15
相关资源
最近更新 更多