我想使用 @ symbol 动态调用 mysql_connect 函数,具体取决于用户是否为管理员(以隐藏错误消息):
//User is an admin:
mysql_connect(...)
//User is not an admin:
@mysql_connect(...)
我试过这个:
//MODE_ADMIN is true or false
private static function mysql_connect(){
return call_user_func_array((MODE_ADMIN ? '' : '@').'mysql_connect', func_get_args());
}
但我得到这个错误:
call_user_func_array()期望参数1是有效的回调函数,找不到函数'@mysql_connect'或函数名无效
那么有一种简单的方法可以动态调用mysql_connect / @mysql_connect吗?当然我可以做一个if / else语句并传递每个参数,但这不会很好。
*(我们的数据库离线,硬件故障,网站上出现了'mysql太多连接'等错误,即使错误报告是E_ALL ^ E_NOTICE ^ E_WARNING ^ E_DEPRECATED)。*
感谢提示。
答案 0 :(得分:2)
我认为您正在尝试根据用户访问级别实现不同的错误/警告级别。
例如,你最好使用error_reporting() - 并且不要使用@
符号 - 因为它使调试几乎不可能。
关于弃用 mysql的通知我更愿意留下上述评论
答案 1 :(得分:1)
更通用;你可以做这样的事情并让它适用于所有功能:
<?php
define('IS_ADMIN', true);
class Dispatcher
{
static public function __callStatic($func, $args)
{
if (defined('IS_ADMIN') && IS_ADMIN)
{
return @call_user_func_array($func, $args);
}
return call_user_func_array($func, $args);
}
}
// now you can do these:
$mysql = Dispatcher::mysql_connect(...);
$passwd = Dispatcher::file_get_contents('/etc/passwd');