PHP是否在isset中加载代码,即使它没有设置?

时间:2013-09-29 15:44:29

标签: php performance

我有一个表现问题。 我用4种不同的isset($_GET[""])

构建了一个页面

让我们打电话给他们

Menu1
Menu2
Menu3
Menu4

我的问题是,当页面设置为示例Menu1(index.php?Menu1)时,PHP是否仍在加载Menu2,3和4的代码,即使它们未设置?

如果确实如此,我猜这是一个非常糟糕的结构,如果网站收到很多流量,会减慢网站流量,因为在某些菜单中我使用的是mysql。

提前致谢!

2 个答案:

答案 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