Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PhpStorm中编写PHPDoc以返回PDO和MySQLi连接_Php_Return_Phpstorm_Phpdoc - Fatal编程技术网

如何在PhpStorm中编写PHPDoc以返回PDO和MySQLi连接

如何在PhpStorm中编写PHPDoc以返回PDO和MySQLi连接,php,return,phpstorm,phpdoc,Php,Return,Phpstorm,Phpdoc,我已经编写了一个函数,可以通过PDO或MySQLi选项更轻松地连接数据库。 目前我正在与PHPDov@return属性进行斗争 我已经在PhpStorm中找到了PDO方法的正确亮点,但我不知道如何使这两种方法的工作方式相似。下面的代码可以更好地解释它 下面是我的dbCon.php函数: <?php # defining the root directory as constant define('__ROOT__', dirname($_SERVER['DOCUMENT_ROOT']))

我已经编写了一个函数,可以通过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];
}

…这对于返回PDO数组很有效,但是由于函数允许切换到MySQLi,我希望这些方法也被突出显示。

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

@return PDO[]|MySQLi

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

@return PDO[]|MySQLi

为什么您同时需要这两种产品?它们将有不同的方法签名等。只需坚持使用一个或使用不同的方法来创建不同的连接处理程序。在任何情况下:正如@Mark所说——使用
\PDO[]\MySQLi
之类的东西——这意味着这两种类型中的任何一种都是可能的(请注意:不是直接回答您的问题,而是让您了解它的工作原理:)。PHPDoc PSR草稿:背后的想法只是编写一个单函数,在这里我只更改一个参数(
$conType
,在我的例子中),并在需要时使用不同的方法。正如您所看到的,函数一次只返回一个连接,这取决于
$conType
“背后的想法只是编写一个单函数,在这里我只更改一个参数($conType),并在需要时使用不同的方法。”这正是它不好的原因。随着时间的推移,你会明白这一点,并且会喜欢使用简单的函数(只做一些事情)而不是复杂的函数。为什么你同时需要这两个函数呢?它们将有不同的方法签名等。只需坚持使用一个或使用不同的方法来创建不同的连接处理程序。在任何情况下:正如@Mark所说——使用
\PDO[]\MySQLi
之类的东西——这意味着这两种类型中的任何一种都是可能的(请注意:不是直接回答您的问题,而是让您了解它的工作原理:)。PHPDoc PSR草稿:背后的想法只是编写一个单函数,在这里我只更改一个参数(
$conType
,在我的例子中),并在需要时使用不同的方法。正如您所看到的,函数一次只返回一个连接,这取决于
$conType
“背后的想法只是编写一个单函数,在这里我只更改一个参数($conType),并在需要时使用不同的方法。”这正是它不好的原因。随着时间的推移,你会理解它,并且会喜欢使用简单的函数而不是复杂的函数。是的,谢谢——事实证明键入
MySQLi
非常重要,而不仅仅是我以前尝试过的
MySQLi
,在我的例子中,它也是一个数组,所以
PDO[]| MySQLi[]
现在工作得很好是的,谢谢--事实证明键入
MySQLi
非常重要,而不仅仅是我以前尝试过的
MySQLi
,而且在我的例子中,它也是一个数组,因此
PDO[]| MySQLi[]
现在工作得很好