php用@符号动态调用函数

时间:2013-08-13 13:47:39

标签: php mysql

我想使用 @ 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)。*

感谢提示。

2 个答案:

答案 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');