一旦我确定PHP中存在一个变量,我是否需要继续在该页面中检查它?

一旦我确定PHP中存在一个变量,我是否需要继续在该页面中检查它?,php,Php,我有一个基本的PHP问题,以下面的代码为例,假设我需要在一个页面上使用10次,有更好的方法吗 我意识到我可以将它封装在一个函数中,然后继续调用该函数,但有没有更好的方法继续检查该项是否已设置且是否等于某个值。在第一次发现这一点后,是否有其他方法可以记住第一次的结果,而不是重复10次 希望这是有道理的 <?PHP if (isset($_SESSION['auto_id']) && $_SESSION['auto_id'] == "1") { //do somet

我有一个基本的PHP问题,以下面的代码为例,假设我需要在一个页面上使用10次,有更好的方法吗

  • 我意识到我可以将它封装在一个函数中,然后继续调用该函数,但有没有更好的方法继续检查该项是否已设置且是否等于某个值。在第一次发现这一点后,是否有其他方法可以记住第一次的结果,而不是重复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

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


在您的示例中,您可以将其设置为“0”,尽管我意识到这可能不是真正的代码…

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


在您的示例中,您可以将其设置为“0”,尽管我意识到这可能不是真正的代码…

在这种情况下,您必须这样做,尽管您可以执行一次并将结果分配给变量

<?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
  }

  // ...
?>
那么

<?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工作了…

在本例中,是的,您必须这样做,尽管您可以做一次并将结果分配给变量

<?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
  }

  // ...
?>
那么

<?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工作了…

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

<?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
  }

  // ...
?>

当然可以。只需将布尔表达式的值保存在另一个变量中

<?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
  }

  // ...
?>
这取决于“做点什么”代码块是什么,以及$\u会话的自动id索引是否在其他代码中更改。您可以确定,在第一个if的主体中,变量存在且为1。一旦if结束,您就不能再确定了——您必须稍后再次检查,除非所有其余的代码都是在只有第一次测试成功时才存在的上下文中执行的(即,有一个else子句终止脚本),并且您确定您不会更改该值(并且您调用的外部代码不会更改它)

检查健全性的一个更好的方法可能是确保环境的大部分都是您期望的,只需检查一次,然后在不同的位置检查特定的值。但是,如果您不断地重新检查这一点,则可能表明存在设计缺陷,其中类似的逻辑(即依赖于auto_id=1的逻辑)没有很好地隔离和分组。

这取决于“do something”代码块是什么,以及$\u会话的auto_id索引是否在其他代码中更改。您可以确定,在第一个if的主体中,变量存在且为1。一旦if结束,您就不能再确定了——您必须稍后再次检查,除非所有其余的代码都是在只有第一次测试成功时才存在的上下文中执行的(即,有一个else子句终止脚本),并且您确定您不会更改该值(并且您调用的外部代码不会更改它)

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


if ($sessionOK) {
    //do this
}

if ($sessionOK) {
    //do that
}

检查健全性的一个更好的方法可能是确保环境的大部分都是您期望的,只需检查一次,然后在不同的位置检查特定的值。但是,如果您不断地重新检查这一点,它可能表明存在设计缺陷,类似的逻辑(即依赖于auto_id=1的逻辑)没有很好地隔离和分组。

在您提供的示例中,PHP只会发出一个e_通知,说明在$\u会话超级全局中找不到索引(如果关闭了严格模式,则不会抛出通知)。最佳做法是将该值设置为默认值,以便确定变量已设置

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


if ($sessionOK) {
    //do this
}

if ($sessionOK) {
    //do that
}


在您提供的示例中,PHP只会发出一个E_通知,说明在$_会话超级全局中找不到索引(如果关闭严格模式,则不会抛出该通知)。最佳做法是将该值设置为默认值,这样您就可以确定变量已设置



$auto\u id\u is\u one优于我的$myCheck:)$auto\u id\u is\u one优于我的$myCheck:)如果设置为零?如果设置$myCheck=0,则$myCheck为false(javascript遵循C规则,0为false,非零为true)。如果auto_id为“0”,则$myCheck仍将为false,因为分配给$myCheck的布尔表达式的值为false。如果将什么设置为零?如果设置$myCheck=0,则$myCheck为false(javascript遵循C规则,0为false,非零为true)。如果auto_id为“0”,则$myCheck仍将为false,因为分配给$myCheck的布尔表达式的值为false。如果对有效答案进行向下投票时至少有一个简短的原因,这将是很酷的,因为如果检查失败,您没有设置$sessionOK;与其他人一样,将$sessionOK分配给检查/比较的结果会更简单。我没有否决你。如果否决有效答案至少有一个简短的理由,那就太酷了。这可能是因为如果检查失败,你没有设置$sessionOK;与其他人一样,将$sessionOK分配给检查/比较的结果会更简单。我没有投你反对票。