1

ユーザーが管理者であるかどうかに応じて、 @ 記号を使用して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 ステートメントを実行して各引数を渡すこともできますが、これは適切ではありません。

*(エラー報告が E_ALL ^ E_NOTICE ^ E_WARNING ^ E_DEPRECATED だったとしても、データベースはオフラインで、ハードウェア障害で、Web サイトは「mysql の接続が多すぎます」などのエラーでいっぱいでした)。

ヒントをありがとう。

4

2 に答える 2

2

さらに一般的です。このようなことをして、すべての機能で機能させることができます:

<?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');
于 2013-08-13T14:06:54.230 に答える
2

ユーザーアクセスレベルに応じて、さまざまなエラー/警告レベルを達成しようとしていると思います。たとえば、error_reporting()を使用して実行することをお勧めします-シンボルを使用しないでください@-デバッグがほぼ不可能になるためです。

非推奨のmysqlに関する通知上記のコメントに残すことを好みます

于 2013-08-13T13:51:51.233 に答える