我有一个表现问题。
我用4种不同的isset($_GET[""])
让我们打电话给他们
Menu1
Menu2
Menu3
Menu4
我的问题是,当页面设置为示例Menu1(index.php?Menu1
)时,PHP是否仍在加载Menu2,3和4的代码,即使它们未设置?
如果确实如此,我猜这是一个非常糟糕的结构,如果网站收到很多流量,会减慢网站流量,因为在某些菜单中我使用的是mysql。
提前致谢!
答案 0 :(得分:1)
如果你说if(isset($stuff))
,条件中的代码只会在设置$ stuff时运行
如果您有if(isset($_GET['menu1'])
,请转到index.php?menu1=something
,
其他if中的所有代码永远不会运行。只检查条件。
答案 1 :(得分:1)
isset仅评估变量,不允许函数或函数返回值。来自PHP Manual (isset):
<?php
$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));
var_dump(isset($a['test'])); // TRUE
var_dump(isset($a['foo'])); // FALSE
var_dump(isset($a['hello'])); // FALSE
// The key 'hello' equals NULL so is considered unset
// If you want to check for NULL key values then try:
var_dump(array_key_exists('hello', $a)); // TRUE
// Checking deeper array values
var_dump(isset($a['pie']['a'])); // TRUE
var_dump(isset($a['pie']['b'])); // FALSE
var_dump(isset($a['cake']['a']['b'])); // FALSE
如果使用AND运算符在if语句中放入多个条件,if语句将在找到第一个错误条件后立即停止计算。在以下示例中,永远不会调用foo():
$a = (false && foo());
$c = (false and foo());
以类似的方式,您可以给出要评估的isset多个参数。手册说“如果提供了多个参数,那么只有在设置了所有参数后,isset()才会返回TRUE。评估从左到右进行,一旦遇到未设置的变量就停止。” :
$a = "test";
$b = "anothertest";
var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE
unset ($a);
var_dump(isset($a)); // FALSE
var_dump(isset($a, $b)); // FALSE