Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
php使用@symbol动态调用函数_Php_Mysql - Fatal编程技术网

php使用@symbol动态调用函数

php使用@symbol动态调用函数,php,mysql,Php,Mysql,我想使用@符号动态调用mysql\u 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\u user\u

我想使用@符号动态调用mysql\u 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\u user\u func\u array()要求参数1为有效回调函数,未找到函数“@mysql\u connect”或函数名无效

那么,有没有一种简单的方法可以动态调用mysql\u connect/@mysql\u connect?当然,我可以做一个if/else语句并传递每个参数,但这并不好

*(我们的数据库处于脱机状态,硬件出现故障,网站充满了诸如“mysql连接太多”之类的错误,即使错误报告是E_ALL ^E_NOTICE ^E_WARNING ^E_DEPRECATED)*


谢谢您的提示。

我想您正试图根据用户访问级别实现不同的错误/警告级别。 例如,您最好使用,-进行调试,并且永远不要使用
@
符号,因为这会使调试几乎不可能


关于不推荐使用的mysql的通知
我更喜欢上面的留言

甚至更一般;您可以这样做,并使其适用于所有功能:

<?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');

@call\u user\u func\u数组是否可能?否则,您必须创建一个方法别名并在其中调用mysql\u connect。然后,通过call_user_func_数组而不是mysql_connectok调用这个新方法。。。所以@call\u user\u func\u array或者call\u user\u func\u array…也许只是解决了问题,而不是抑制错误消息?PSA:mysql\u*
函数是。不建议编写新代码,因为这样会阻止您将来升级。相反,使用或和。如果不是抑制错误,而是捕捉到错误呢?仅当
MODE\u ADMIN
为真时才显示它。你是什么意思?设置
error\u reporting(0)
将抑制任何错误消息,甚至不会显示致命错误。error\u reporting(E\u ALL ^E\u NOTICE ^E\u WARNING ^E\u DEPRECATED)仍然会给我一条mysql错误消息“连接太多”。我的答案正是您要做的:使用设置
error\u reporting(0)
而不是
(一般来说,这也会有同样的效果)。我感谢所有其他提示,但这就是我所问的:)请注意,我只是在回答这个问题,不提倡使用这样的代码。我只是不做判断。我想不出有什么,但谁知道这可能存在什么样的有效边缘情况呢?好吧,下次我将看看错误报告(0)是否会奏效。但是E_警告被禁用,仍然有一个警告!好。。。
<?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');