1

私はフォーラム システムを持っており$users->permissions()、thread.php ページで多くのことを使用しています。私が知りたいのは、次のようなことをするのではなく、次のような$rights = $users->permissions()ことをするのではなく、その人の権利を取得するためにデータベースを呼び出すだけでよいということです。

if($users->permissions() ==1) { show some mod panel }
elseif($users->permissions == 2) { show some admin panel }


SELECT  `users`.`rights` FROM `users` LEFT JOIN `sessions` ON `sessions`.`user_id` =   `users`.`id` WHERE `sessions`.`session_hash` ='".$this->con->real_escape_string($_COOKIE['session_hash'])."'
4

2 に答える 2

1

関数と変数を混同しています。

呼び出すたびに実行される関数とは異なり、変数は何も実行しません。それらにはいくつかの値しか含まれていません。これは、お金をポケットに入れるようなものです。店主から小銭を受け取ってポケットに入れると、お金はポケットに残ります。ポケットに手を入れるたびに店主は必要ありません。

于 2012-04-22T18:05:38.297 に答える
1

あなたが正しいです。$users->permissions()呼び出しの結果を変数 (例: )に保存し、$rightsそれを使用してチェックすると、データベースへの呼び出しが 1 回だけ実行されます (そして、スクリプトを実行するのではなく、その時点でローカル データをチェックしているため、スクリプトが高速化されます)。他の場所のサーバーへのリクエスト)。

ただし、最初の質問で示したコードを使用すると、値を確認するたびにデータベースへの呼び出しが実行されます。

個人的には、次のswitch構造を使用します。

$rights=$users->permissions();
switch ($rights)
{
  case 1:
    //Show some form
    break;
  case 2:
    //Show something else
    break;
  default:
    //Do something just in case it's not 1 or 2
    break;
}

if...elseステートメントに固執したい場合は、結果を変数に保存し、構造内の$users->permissions()どこにいても、それを次のように置き換えます$users->permissions()if$rights

于 2012-04-22T19:49:43.530 に答える