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)中,然后使用它来检查,那么它只会对数据库执行一次调用(并加速脚本,因为它当时正在检查本地数据而不是触发向其他地方的服务器请求)。

但是,如果您使用在初始问题中显示的代码,那么每次检查值时它都会调用数据库。

就个人而言,我会使用一个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 回答