php使用@symbol动态调用函数
我想使用@符号动态调用mysql\u connect函数,具体取决于用户是否是管理员(以消除错误消息): 我试过这个: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
//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');