【发布时间】:2023-03-18 08:05:01
【问题描述】:
mysql 扩展函数接受可选的链接参数,如果没有指定,它们使用 mysql_connect 调用的最后一个返回值。我希望在更高级别的函数中具有相同的行为,但不知道如何实现它。以下是我绝对不想使用的丑陋示例:
function get_mysql_info($linkid = null){
$linkid ? $strInfo = mysql_info($linkid) : $strInfo = mysql_info();
// followed by multiple tortures by ereg calls even!
我看到了两种可能(或可能不)起作用的方法:
- 通过一些真正的 void 值(NULL 不合格,函数抱怨)到较低级别并使 mysql 函数认为没有链接参数并使用最后记住的资源
- 检索最后记住的资源并显式采用默认方式
这两种变体都没有成功,请指教,谢谢!
请原谅重复,这是伪代码尝试进一步解释我想要什么:
function mysql_wrap ( $optional_link_identifier ) {
mysql_this( $optional_link_identifier ); // use specified link or default (as described above)
mysql_that( $mandatory_parameter, $optional_link_identifier ); // use specified link or default
// so on
}
...而不是根据可选参数的存在/不存在进行分支:
function mysql_wrap ( $optional_link_identifier = NULL ) {
if ( $optional_link_identifier )
mysql_this( $optional_link_identifier ); // use specified link
else mysql_this(); // or default
if ( $optional_link_identifier )
mysql_that( $mandatory_parameter, $optional_link_identifier ); // use specified link
else mysql_that(); // or default
// so on. as you see, generalizing the code in the function actually made things even worse
}
所以,我正在寻找通用处理这两种情况的方法。
【问题讨论】:
-
为什么你绝对不想用最自然的方式来表达这一点?你能详细说明一下吗?