我有一个论坛系统,我在thread.php页面中经常使用$users->permissions()
。我想知道的是,如果我做$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'])."'
答案 0 :(得分:1)
你混淆了函数和变量。
与每次调用时运行的函数不同,变量不运行任何东西。它们只包含一些价值。这就像把钱放在口袋里。一旦你从店主那里得到你的更换并把它放在口袋里,钱就留在口袋里,每次你把手放在口袋里都不需要店主。
答案 1 :(得分:1)
你是对的。如果将调用$users->permissions()
的结果存储到变量(例如$rights
)然后使用它进行检查,那么它将只执行一次对数据库的调用(并加快脚本的速度&#) 39;在那一点上检查本地数据而不是在别处向服务器发出请求。
但是,如果您使用初始问题中显示的代码,那么每次检查值时它都会执行对数据库的调用。
就个人而言,我会使用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