2009-09-04 73 views
1

我有一个基本的PHP问题,例如下面的代码,假设我需要在页面上使用这10次,有没有更好的方法来做到这一点?一旦我确定了PHP中存在的var,我是否需要在该页面中检查它?

  • 我知道我可以在一个功能包,并自顾自地调用该函数,但有没有更好的方法然后继续,如果该项目被设置检查和等于某个值。第一次发现这种情况后,是否有其他方式记住第一次的结果,而不是做10次不同的时间?

希望是有道理的。

<?PHP 
if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { 
    //do something 
} 

// do other code here that breaks these up 

if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { 
    //do something else 
} 

// do other code here that breaks these up 

if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { 
    //do something else 
} 

// do other code here that breaks these up 

if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { 
    //do something else 
} 

...ect 

?>

回答

4

在这种情况下,是的,你必须这样做,但你可以做一次,将结果分配给一个变量。

怎么样......

<?PHP 
$myCheck = (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") ; 

if($myCheck) { 
    //do something 
} 

// do other code here that breaks these up 

if($myCheck) { 
    //do something else 
} 

// do other code here that breaks these up 

if($myCheck) { 
    //do something else 
} 

// do other code here that breaks these up 

if($myCheck) { 
    //do something else 
} 
etc. 
?> 

语法可能会关闭 - 这是一个很长的时间,因为我做了任何PHP工作...

+0

不知什么如果设置为零$ myCheck将是真实的它被设置为0 – JasonDavis 2009-09-04 14:37:04

+0

?如果您设置$ myCheck = 0,那么$ myCheck为false(JavaScript遵循C规则,即0为false且非零为真)。如果auto_id是“0”,那么$ myCheck将仍然是false,因为分配给$ myCheck的布尔表达式的值是false。 – 2009-09-04 14:40:29

+0

awsome谢谢 – JasonDavis 2009-09-04 14:45:15

2

也许更好的做法是在函数的顶部使用isset一次,变量设置为默认值出现。然后,您可以简单地通过该函数的其余部分使用该值。

在你的榜样,你可以将其设置为“0”,虽然我知道这可能不是真正的代码...

3

肯定。只需将布尔表达式的值保存在另一个变量中。

<?php 

    $auto_id_is_one = ($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1"); 

    // ... 

    if ($auto_id_is_one) { 
    // do something 
    } 

    // ... 

    if ($auto_id_is_one) { 
    // do something else 
    } 

    // ... 
?> 

虽然你可能想给它一个比$auto_id_is_one更有意义的名字。

+0

$ auto_id_is_one比我的$ myCheck好:) – ZombieSheep 2009-09-04 14:31:52

0

这取决于“做某事”代码块是什么,以及$ _SESSION的auto_id索引是否在其他代码中发生更改。你可以肯定的是,在第一个主体中,变量是存在的,并且是1.一旦如果得出结论,你就不能再确定了 - 你将不得不再次检查,除非所有其余的代码只在第一个测试成功时才存在(即有一个else子句终止脚本),并且您确定不会更改该值(并且没有您调用的外部代码会改变它)。

一个更好的方法来检查理智可能是为了确保大部分环境与您期望的一样,然后在各个地方检查具体的值。但是,如果您不断重新检查此问题,则可能表明存在设计缺陷,其中类似的逻辑(即依赖于auto_id = 1的逻辑)没有很好地隔离和分组。

-1
<?PHP 
if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { 
    $sessionOK = TRUE; 
} 


if ($sessionOK) { 
    //do this 
} 

if ($sessionOK) { 
    //do that 
} 
+0

如果downvoting有效答案至少有一个简短的原因,这将是很酷的 – 2009-09-04 14:47:38

+0

它可能是因为如果检查失败,你没有设置$ sessionOK;只要将其他人已经完成的$ sessionOK分配给检查/比较的结果就简单多了。我没有让你失望。 – 2009-09-04 14:51:18

+0

它对我来说很好 – JasonDavis 2009-09-04 15:15:02

0

在你提供的,PHP将只发布该指数未在$ _SESSION超全局发现(这将不会抛出的通知,如果你关闭了严格的模式)E_NOTICE的例子。最好的做法是将值设置为默认值,以便确保知道该变量已设置。

<?php 

$myVar = isset($_SESSION['auto_id']) ? $_SESSION['auto_id'] : FALSE; 

if (false !== $myVar) 
{ 
    //do something 
} 

//do something not realated to myVar being set 

if (false !== $myVar) 
{ 
    //do somethign else 
} 
?> 
相关问题